From 62fa3934aabe3074a932f7f29afca3ecb4f0f8d6 Mon Sep 17 00:00:00 2001 From: vgopalakPrgs Date: Thu, 12 Apr 2018 18:31:35 +0530 Subject: [PATCH 01/59] Added support for passing bearer token in Authorization header --- src/auth/progress.auth.bearer.js | 145 +++++++++++++++++++++++++++++++ src/auth/progress.auth.js | 3 + src/progress.session.js | 18 +++- 3 files changed, 163 insertions(+), 3 deletions(-) create mode 100644 src/auth/progress.auth.bearer.js diff --git a/src/auth/progress.auth.bearer.js b/src/auth/progress.auth.bearer.js new file mode 100644 index 0000000..9586acb --- /dev/null +++ b/src/auth/progress.auth.bearer.js @@ -0,0 +1,145 @@ +/* +progress.auth.Bearer.js Version: 4.4.0-3 + +Copyright (c) 2017-2018 Progress Software Corporation and/or its subsidiaries or affiliates. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + + */ + +(function () { + + "use strict"; // note that this makes JSLint complain if you use arguments[x] + + /*global progress : true*/ + /*global storage, XMLHttpRequest, msg, btoa*/ + + progress.data.AuthenticationProviderBearer = function (uri) { + var bearerToken = null, + fn; + + // process constructor arguments, etc. + this._initialize(uri, progress.data.Session.AUTH_TYPE_BEARER, + {"_loginURI": progress.data.AuthenticationProvider._homeLoginURIBase}); + + // PRIVATE FUNCTIONS + + function make_Bearer_auth_header(token) { + return "Bearer " + token; + } + + // "INTERNAL" METHODS + // Override the protoype's method but call it from within the override + // (Define the override here in the constructor so it has access to instance variables) + this._reset = function () { + bearerToken = null; + progress.data.AuthenticationProviderBearer.prototype._reset.apply(this); + }; + + // Override the protoype's method (this method does not invoke the prototype's copy) + // (Define the override here in the constructor so it has access to instance variables) + this._openLoginRequest = function (xhr, uri) { + var auth; + + xhr.open("GET", uri, true); // but see comments below inside the "if bearerToken" + // may have to go with that approach + + if (bearerToken) { + + // set Authorization header + auth = make_Bearer_auth_header(bearerToken); + xhr.setRequestHeader('Authorization', auth); + } + + progress.data.Session._setNoCacheHeaders(xhr); + }; + + // Override the protoype's method but call it from within the override + // (Define the override here in the constructor so it has access to instance variables) + this._processLoginResult = function _Bearer_processLoginResult(xhr, deferred) { + progress.data.AuthenticationProviderBearer.prototype._processLoginResult.apply( + this, + [xhr, deferred] + ); + if (!this._loggedIn) { + // login failed, clear the credentials + bearerToken = null; + } + }; + + // Override the protoype's method (this method does not invoke the prototype's copy, but + // calls a prototype general-purpose login method) + // (Define the override here in the constructor so it has access to instance variables) + this.login = function (token) { + // these throw if the check fails (may want to do something more elegant) + this._checkStringArg("login", token, 1, "token"); + + bearerToken = token; + return this._loginProto(); + }; + + // Override the protoype's method (this method does not invoke the prototype's copy) + // (Define the override here in the constructor so it has access to instance variables) + // TODO: This method uses a callback, primarily to avoid breaking tdriver tests. We should change + // it to use promises + this._openRequestAndAuthorize = function (xhr, verb, uri, async, callback) { + var auth, + errorObject; + + if (this.hasClientCredentials()) { + + xhr.open(verb, uri, async); // but see comments below inside the "if bearerToken" + // may have to go with that approach + + if (bearerToken) { + + // set Authorization header + auth = make_Bearer_auth_header(bearerToken); + xhr.setRequestHeader('Authorization', auth); + } + + progress.data.Session._setNoCacheHeaders(xhr); + } else { + // AuthenticationProvider: The AuthenticationProvider is not managing valid credentials. + errorObject = new Error(progress.data._getMsgText("jsdoMSG125", "AuthenticationProvider")); + } + + callback(errorObject); + }; + }; + + + // Give this constructor the prototype from the "base" AuthenticationProvider + // Do this indirectly by way of an intermediate object so changes to the prototype ("method overrides") + // don't affect other types of AuthenticationProviders that use the prototype) + function BearerProxy() {} + BearerProxy.prototype = progress.data.AuthenticationProvider.prototype; + progress.data.AuthenticationProviderBearer.prototype = new BearerProxy(); + + // Reset the prototype's constructor property so it points to AuthenticationProviderForm rather than + // the one that it just inherited (this is pretty much irrelevant though - the correct constructor + // will get called regardless) + progress.data.AuthenticationProviderBearer.prototype.constructor = + progress.data.AuthenticationProviderBearer; + + + // OVERRIDE METHODS ON PROTOTYPE IF NECESSARY AND POSSIBLE + // (SOME METHODS ARE OVERRIDDEN IN THE CONSTRUCTOR BECAUSE THEY NEED ACCESS TO INSTANCE VARIABLES) + + // NOTE: There are no overrides of the following methods (either here or in the constructor). + // This object uses these methods from the original prototype(i.e., the implementations from the + // AuthenticationProvider object): + // logout (API method) + // hasClientCredentials (API method) + +}()); diff --git a/src/auth/progress.auth.js b/src/auth/progress.auth.js index 29c14b3..ac9f2f0 100644 --- a/src/auth/progress.auth.js +++ b/src/auth/progress.auth.js @@ -88,6 +88,9 @@ limitations under the License. case progress.data.Session.AUTH_TYPE_FORM_SSO: authProv = new progress.data.AuthenticationProviderSSO(initObject.uri); break; + case progress.data.Session.AUTH_TYPE_BEARER: + authProv = new progress.data.AuthenticationProviderBearer(initObject.uri); + break; default: // AuthenticationProvider: The 'init-object' parameter passed to the 'constructor' function // has an invalid value for the 'authenticationModel' property. diff --git a/src/progress.session.js b/src/progress.session.js index 02743f2..3b23a6c 100644 --- a/src/progress.session.js +++ b/src/progress.session.js @@ -996,6 +996,7 @@ limitations under the License. case progress.data.Session.AUTH_TYPE_BASIC: case progress.data.Session.AUTH_TYPE_ANON: case progress.data.Session.AUTH_TYPE_SSO: + case progress.data.Session.AUTH_TYPE_BEARER: case null: _authenticationModel = newval; storeSessionInfo("authenticationModel", newval); @@ -2099,7 +2100,8 @@ limitations under the License. xhr._jsdosession = jsdosession; // in case the caller is a JSDOSession xhr._deferred = deferred; // in case the caller is a JSDOSession if (this.authenticationModel === progress.data.Session.AUTH_TYPE_FORM || - this.authenticationModel === progress.data.Session.AUTH_TYPE_BASIC) { + this.authenticationModel === progress.data.Session.AUTH_TYPE_BASIC || + this.authenticationModel === progress.data.Session.AUTH_TYPE_BEARER) { if (isAsync) { xhr.onreadystatechange = this._onReadyStateChangeGeneric; xhr.onResponseFn = this._processLogoutResult; @@ -2195,7 +2197,8 @@ limitations under the License. } else if (xhr.status !== 200) { /* Determine whether an error returned from the server is really an error */ - if (pdsession.authenticationModel === progress.data.Session.AUTH_TYPE_BASIC) { + if (pdsession.authenticationModel === progress.data.Session.AUTH_TYPE_BASIC || + pdsession.authenticationModel === progress.data.Session.AUTH_TYPE_BEARER) { /* If the Auth model is Basic, we probably got back a 404 Not found. * But that's OK, because logout from Basic is meaningless on the * server side unless it happens to be stateful, which is the only @@ -3580,7 +3583,15 @@ limitations under the License. enumerable: true } ); - + Object.defineProperty( + progress.data.Session, + 'AUTH_TYPE_BEARER', + { + value: "bearer", + enumerable: true + } + ); + Object.defineProperty( progress.data.Session, 'DEVICE_OFFLINE', @@ -3635,6 +3646,7 @@ limitations under the License. progress.data.Session.AUTH_TYPE_BASIC = "basic"; progress.data.Session.AUTH_TYPE_FORM = "form"; progress.data.Session.AUTH_TYPE_SSO = "sso"; + progress.data.Session.AUTH_TYPE_BEARER = "bearer"; /* deliberately not including the "offline reasons" that are defined in the * 1st part of the conditional. We believe that we can be used only in environments where From 7128c945523850013eb39ae4de091b0d34dda1dd Mon Sep 17 00:00:00 2001 From: Vignesh Gopalakrishnan Date: Fri, 13 Jul 2018 15:04:01 +0530 Subject: [PATCH 02/59] added try catch in onreadystate functions --- src/auth/progress.auth.form.js | 5 +- src/auth/progress.auth.js | 5 +- src/auth/progress.auth.sso.js | 5 +- src/progress.js | 104 ++++++++++++++++++--------------- src/progress.session.js | 104 +++++++++++++++++---------------- 5 files changed, 123 insertions(+), 100 deletions(-) diff --git a/src/auth/progress.auth.form.js b/src/auth/progress.auth.form.js index ae5a457..e8ee17a 100644 --- a/src/auth/progress.auth.form.js +++ b/src/auth/progress.auth.form.js @@ -118,7 +118,10 @@ limitations under the License. xhr.onreadystatechange = function () { if (xhr.readyState === 4) { // process the response from the Web application - that._processLogoutResult(xhr, deferred); + try { + that._processLogoutResult(xhr, deferred); + } catch (e) { + } } }; diff --git a/src/auth/progress.auth.js b/src/auth/progress.auth.js index ac9f2f0..36d7bec 100644 --- a/src/auth/progress.auth.js +++ b/src/auth/progress.auth.js @@ -132,7 +132,10 @@ limitations under the License. xhr.onreadystatechange = function () { if (xhr.readyState === 4) { // process the response from the Web application - that._processLoginResult(xhr, deferred); + try { + that._processLoginResult(xhr, deferred); + } catch (e) { + } } }; diff --git a/src/auth/progress.auth.sso.js b/src/auth/progress.auth.sso.js index b2f7375..5bec3e1 100644 --- a/src/auth/progress.auth.sso.js +++ b/src/auth/progress.auth.sso.js @@ -356,7 +356,10 @@ limitations under the License. xhr.onreadystatechange = function () { if (xhr.readyState === 4) { // process the response from the Web application - processRefreshResult(xhr, deferred); + try { + processRefreshResult(xhr, deferred); + } catch (e){ + } } }; diff --git a/src/progress.js b/src/progress.js index 2fb23b6..ef8c7f0 100644 --- a/src/progress.js +++ b/src/progress.js @@ -6369,67 +6369,75 @@ limitations under the License. var xhr = this; if (xhr.readyState == 4) { var request = xhr.request; - - /* try to parse response even if request is considered "failed" due to http status */ try { - request.response = JSON.parse(xhr.responseText); - // in some cases the object back from appserver has a "response" property which represents - // the real content of the JSON...happens when multiple output parameters are returned. - // this of course assumes no one names their root object "response". - if (request.response && request.response.response) { - request.response = request.response.response; + + /* try to parse response even if request is considered "failed" due to http status */ + try { + request.response = JSON.parse(xhr.responseText); + // in some cases the object back from appserver has a "response" property which represents + // the real content of the JSON...happens when multiple output parameters are returned. + // this of course assumes no one names their root object "response". + if (request.response && request.response.response) { + request.response = request.response.response; + } + } catch (e) { + request.response = undefined; } - } catch (e) { - request.response = undefined; - } - try { - if ((xhr.status >= 200 && xhr.status < 300) - || (xhr.status === 0 && xhr.responseText !== "")) { - - request.success = true; - // get the Client Context ID (AppServer ID) - xhr.jsdo._session._saveClientContextId(xhr); - if ((typeof xhr.onSuccessFn) == 'function') { - var operation; - if (xhr.request.fnName !== undefined - && xhr.jsdo._resource.fn[xhr.request.fnName] !== undefined) { - operation = xhr.jsdo._resource.fn[xhr.request.fnName].operation; + try { + if ((xhr.status >= 200 && xhr.status < 300) + || (xhr.status === 0 && xhr.responseText !== "")) { + + request.success = true; + // get the Client Context ID (AppServer ID) + xhr.jsdo._session._saveClientContextId(xhr); + if ((typeof xhr.onSuccessFn) == 'function') { + var operation; + if (xhr.request.fnName !== undefined + && xhr.jsdo._resource.fn[xhr.request.fnName] !== undefined) { + operation = xhr.jsdo._resource.fn[xhr.request.fnName].operation; + } + else + operation = null; + if ((operation === undefined) || (operation !== null && operation.mergeMode)) + xhr.jsdo._mergeInvoke(request.response, xhr); + if (request.success) + xhr.onSuccessFn(xhr.jsdo, request.success, request); + else if ((typeof xhr.onErrorFn) == 'function') + xhr.onErrorFn(xhr.jsdo, request.success, request); } - else - operation = null; - if ((operation === undefined) || (operation !== null && operation.mergeMode)) - xhr.jsdo._mergeInvoke(request.response, xhr); - if (request.success) - xhr.onSuccessFn(xhr.jsdo, request.success, request); - else if ((typeof xhr.onErrorFn) == 'function') - xhr.onErrorFn(xhr.jsdo, request.success, request); - } - } else { - request.success = false; - if (xhr.status === 0) { - request.exception = new Error(msg.getMsgText("jsdoMSG101")); + } else { + request.success = false; + if (xhr.status === 0) { + request.exception = new Error(msg.getMsgText("jsdoMSG101")); + } + if ((typeof xhr.onErrorFn) == 'function') { + xhr.onErrorFn(xhr.jsdo, request.success, request); + } } + } catch (e) { + request.success = false; + request.exception = e; if ((typeof xhr.onErrorFn) == 'function') { xhr.onErrorFn(xhr.jsdo, request.success, request); } } - } catch (e) { - request.success = false; - request.exception = e; - if ((typeof xhr.onErrorFn) == 'function') { - xhr.onErrorFn(xhr.jsdo, request.success, request); + // get the Client Context ID (AppServer ID) + xhr.jsdo._session._checkServiceResponse(xhr, request.success, request); + + if ((typeof xhr.onCompleteFn) == 'function') { + xhr.onCompleteFn(xhr.jsdo, request.success, request); } - } - // get the Client Context ID (AppServer ID) - xhr.jsdo._session._checkServiceResponse(xhr, request.success, request); - if ((typeof xhr.onCompleteFn) == 'function') { - xhr.onCompleteFn(xhr.jsdo, request.success, request); + } catch (e) { + request.success = false; + request.exception = e; + if ((typeof xhr.onErrorFn) == 'function') { + xhr.onErrorFn(xhr.jsdo, request.success, request); + } + } } - - } }; /* diff --git a/src/progress.session.js b/src/progress.session.js index 3b23a6c..8b25ca6 100644 --- a/src/progress.session.js +++ b/src/progress.session.js @@ -2914,38 +2914,42 @@ limitations under the License. this._onReadyStateChangePing = function () { var xhr = this; var args; - - if (xhr.readyState === 4) { - args = { - xhr: xhr, - fireEventIfOfflineChange: true, - offlineReason: null - }; - that._processPingResult(args); - if (_pingInterval > 0) { - _timeoutID = setTimeout(that._autoping, _pingInterval); + try { + if (xhr.readyState === 4) { + args = { + xhr: xhr, + fireEventIfOfflineChange: true, + offlineReason: null + }; + that._processPingResult(args); + if (_pingInterval > 0) { + _timeoutID = setTimeout(that._autoping, _pingInterval); + } } + } catch(e) { } }; this._pingtestOnReadyStateChange = function () { var xhr = this; + try { + if (xhr.readyState === 4) { + var foundOeping = false; + if (xhr.status >= 200 && xhr.status < 300) { + foundOeping = true; + } else { + setPartialPingURI(that.loginTarget); + console.warn("Default ping target not available, will use loginTarget instead."); + } + setOepingAvailable(foundOeping); - if (xhr.readyState === 4) { - var foundOeping = false; - if (xhr.status >= 200 && xhr.status < 300) { - foundOeping = true; - } else { - setPartialPingURI(that.loginTarget); - console.warn("Default ping target not available, will use loginTarget instead."); - } - setOepingAvailable(foundOeping); - - // If we're here, we've just logged in. If pingInterval has been set, we need - // to start autopinging - if (_pingInterval > 0) { - _timeoutID = setTimeout(that._autoping, _pingInterval); + // If we're here, we've just logged in. If pingInterval has been set, we need + // to start autopinging + if (_pingInterval > 0) { + _timeoutID = setTimeout(that._autoping, _pingInterval); + } } + } catch(e) { } }; @@ -4447,34 +4451,36 @@ limitations under the License. var xhr = this, cbresult, info; - - if (xhr.readyState === 4) { - info = { - xhr: xhr, - offlineReason: undefined, - fireEventIfOfflineChange: true, - usingOepingFormat: false - }; - - // call _processPingResult because it has logic for - // detecting change in online/offline state - _pdsession._processPingResult(info); - - if (xhr.status >= 200 && xhr.status < 300) { - deferred.resolve( - that, - progress.data.Session.SUCCESS, - info - ); - } else { - if (xhr.status === 401) { - cbresult = progress.data.AuthenticationProvider._getAuthFailureReason(xhr); + try { + if (xhr.readyState === 4) { + info = { + xhr: xhr, + offlineReason: undefined, + fireEventIfOfflineChange: true, + usingOepingFormat: false + }; + + // call _processPingResult because it has logic for + // detecting change in online/offline state + _pdsession._processPingResult(info); + + if (xhr.status >= 200 && xhr.status < 300) { + deferred.resolve( + that, + progress.data.Session.SUCCESS, + info + ); } else { - cbresult = progress.data.Session.GENERAL_FAILURE; + if (xhr.status === 401) { + cbresult = progress.data.AuthenticationProvider._getAuthFailureReason(xhr); + } else { + cbresult = progress.data.Session.GENERAL_FAILURE; + } + deferred.reject(that, cbresult, info); } - deferred.reject(that, cbresult, info); } - } + } catch (e) { + } }; try { From 7593010a31fb5b309ea4045b90782077d7ab243c Mon Sep 17 00:00:00 2001 From: Nicolette Date: Mon, 8 Oct 2018 14:24:35 -0400 Subject: [PATCH 03/59] update JSDO to next version as part of release end game tasks --- lib/progress.all.js | 18 +++++++++--------- lib/progress.all.min.js | 2 +- lib/progress.jsdo.js | 16 ++++++++-------- lib/progress.jsdo.min.js | 2 +- package.json | 2 +- packages/angular/package.json | 6 +++--- packages/core/package.json | 2 +- packages/core/readme.md | 2 +- packages/nativescript/package.json | 6 +++--- packages/ng-datasource/package.json | 6 +++--- .../ng-datasource/src/progress.data.ng.ds.ts | 4 ++-- packages/node/package.json | 6 +++--- readme.md | 2 +- src/auth/progress.auth.basic.js | 2 +- src/auth/progress.auth.form.js | 2 +- src/auth/progress.auth.js | 2 +- src/auth/progress.auth.sso.js | 2 +- src/progress.data.kendo.js | 2 +- src/progress.js | 2 +- src/progress.session.js | 2 +- src/progress.util.js | 2 +- 21 files changed, 45 insertions(+), 45 deletions(-) diff --git a/lib/progress.all.js b/lib/progress.all.js index 9723ab0..128ad4d 100644 --- a/lib/progress.all.js +++ b/lib/progress.all.js @@ -1,5 +1,5 @@ /* -Progress JSDO Version: 6.0.0 +Progress JSDO Version: 6.1.0 Copyright 2012-2018 Progress Software Corporation and/or its subsidiaries or affiliates. @@ -18,7 +18,7 @@ limitations under the License. /*eslint no-global-assign: ["error", {"exceptions": ["localStorage"]}]*/ /*global XMLHttpRequest:true, require, console, localStorage:true, sessionStorage:true, $:true, Promise, setTimeout */ /* -progress.util.js Version: 6.0.0 +progress.util.js Version: 6.1.0 Copyright (c) 2014-2018 Progress Software Corporation and/or its subsidiaries or affiliates. @@ -1095,7 +1095,7 @@ limitations under the License. }()); //# sourceURL=progress.jsdo.js /* -progress.js Version: 6.0.0 +progress.js Version: 6.1.0 Copyright (c) 2012-2018 Progress Software Corporation and/or its subsidiaries or affiliates. @@ -8727,7 +8727,7 @@ limitations under the License. //this is so that we can see the code in Chrome's Source tab when script is loaded via XHR //# sourceURL=progress.jsdo.js /* -progress.session.js Version: 6.0.0 +progress.session.js Version: 6.1.0 Copyright (c) 2012-2018 Progress Software Corporation and/or its subsidiaries or affiliates. @@ -13702,7 +13702,7 @@ if (typeof exports !== "undefined") { //# sourceURL=progress.jsdo.js /* -progress.auth.js Version: 6.0.0 +progress.auth.js Version: 6.1.0 Copyright (c) 2016-2017 Progress Software Corporation and/or its subsidiaries or affiliates. @@ -14173,7 +14173,7 @@ limitations under the License. //# sourceURL=progress.jsdo.js /* -progress.auth.basic.js Version: 6.0.0 +progress.auth.basic.js Version: 6.1.0 Copyright (c) 2016-2017 Progress Software Corporation and/or its subsidiaries or affiliates. @@ -14332,7 +14332,7 @@ limitations under the License. }()); //# sourceURL=progress.jsdo.js /* -progress.auth.form.js Version: 6.0.0 +progress.auth.form.js Version: 6.1.0 Copyright (c) 2016-2018 Progress Software Corporation and/or its subsidiaries or affiliates. @@ -14544,7 +14544,7 @@ limitations under the License. }()); //# sourceURL=progress.jsdo.js /* -progress.auth.sso.js Version: 6.0.0 +progress.auth.sso.js Version: 6.1.0 Copyright (c) 2016-2017 Progress Software Corporation and/or its subsidiaries or affiliates. @@ -15038,7 +15038,7 @@ limitations under the License. /* -progress.data.kendo.js Version: 6.0.0 +progress.data.kendo.js Version: 6.1.0 Copyright (c) 2015-2018 Progress Software Corporation and/or its subsidiaries or affiliates. diff --git a/lib/progress.all.min.js b/lib/progress.all.min.js index d37749a..fb08783 100644 --- a/lib/progress.all.min.js +++ b/lib/progress.all.min.js @@ -1,5 +1,5 @@ /* -Progress JSDO Version: 6.0.0 +Progress JSDO Version: 6.1.0 Copyright 2012-2018 Progress Software Corporation and/or its subsidiaries or affiliates. diff --git a/lib/progress.jsdo.js b/lib/progress.jsdo.js index ff04de1..47fa9bc 100644 --- a/lib/progress.jsdo.js +++ b/lib/progress.jsdo.js @@ -1,5 +1,5 @@ /* -Progress JSDO Version: 6.0.0 +Progress JSDO Version: 6.1.0 Copyright 2012-2018 Progress Software Corporation and/or its subsidiaries or affiliates. @@ -18,7 +18,7 @@ limitations under the License. /*eslint no-global-assign: ["error", {"exceptions": ["localStorage"]}]*/ /*global XMLHttpRequest:true, require, console, localStorage:true, sessionStorage:true, $:true, Promise, setTimeout */ /* -progress.util.js Version: 6.0.0 +progress.util.js Version: 6.1.0 Copyright (c) 2014-2018 Progress Software Corporation and/or its subsidiaries or affiliates. @@ -1095,7 +1095,7 @@ limitations under the License. }()); //# sourceURL=progress.jsdo.js /* -progress.js Version: 6.0.0 +progress.js Version: 6.1.0 Copyright (c) 2012-2018 Progress Software Corporation and/or its subsidiaries or affiliates. @@ -8727,7 +8727,7 @@ limitations under the License. //this is so that we can see the code in Chrome's Source tab when script is loaded via XHR //# sourceURL=progress.jsdo.js /* -progress.session.js Version: 6.0.0 +progress.session.js Version: 6.1.0 Copyright (c) 2012-2018 Progress Software Corporation and/or its subsidiaries or affiliates. @@ -13702,7 +13702,7 @@ if (typeof exports !== "undefined") { //# sourceURL=progress.jsdo.js /* -progress.auth.js Version: 6.0.0 +progress.auth.js Version: 6.1.0 Copyright (c) 2016-2017 Progress Software Corporation and/or its subsidiaries or affiliates. @@ -14173,7 +14173,7 @@ limitations under the License. //# sourceURL=progress.jsdo.js /* -progress.auth.basic.js Version: 6.0.0 +progress.auth.basic.js Version: 6.1.0 Copyright (c) 2016-2017 Progress Software Corporation and/or its subsidiaries or affiliates. @@ -14332,7 +14332,7 @@ limitations under the License. }()); //# sourceURL=progress.jsdo.js /* -progress.auth.form.js Version: 6.0.0 +progress.auth.form.js Version: 6.1.0 Copyright (c) 2016-2018 Progress Software Corporation and/or its subsidiaries or affiliates. @@ -14544,7 +14544,7 @@ limitations under the License. }()); //# sourceURL=progress.jsdo.js /* -progress.auth.sso.js Version: 6.0.0 +progress.auth.sso.js Version: 6.1.0 Copyright (c) 2016-2017 Progress Software Corporation and/or its subsidiaries or affiliates. diff --git a/lib/progress.jsdo.min.js b/lib/progress.jsdo.min.js index 6a171e3..e461cfa 100644 --- a/lib/progress.jsdo.min.js +++ b/lib/progress.jsdo.min.js @@ -1,5 +1,5 @@ /* -Progress JSDO Version: 6.0.0 +Progress JSDO Version: 6.1.0 Copyright 2012-2018 Progress Software Corporation and/or its subsidiaries or affiliates. diff --git a/package.json b/package.json index 003ac32..dc56c8e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@progress/jsdo", - "version": "6.0.0", + "version": "6.1.0", "description": "The JSDO is a JavaScript implementation of the CDO Specification published by Progress Software Corporation.\r The JSDO is a free and open-source full-featured implementation that can be used in web, mobile web and hybrid mobile apps.", "main": "lib/progress.all.min.js", "files": [ diff --git a/packages/angular/package.json b/packages/angular/package.json index fc3976c..2cc2506 100644 --- a/packages/angular/package.json +++ b/packages/angular/package.json @@ -1,6 +1,6 @@ { "name": "@progress/jsdo-angular", - "version": "6.0.0", + "version": "6.1.0", "description": "The Progress Data Source is a TypeScript implementation - Progress Data Source class for NativeScript, Angular. This will provide a seamless integration between OpenEdge (Progress Data Object) with Angular.", "main": "lib/progress.data.angular.js", "files": [ @@ -33,11 +33,11 @@ }, "homepage": "https://github.com/progress/JSDO#readme", "dependencies": { - "@progress/jsdo-core": "^6.0.0" + "@progress/jsdo-core": "^6.1.0" }, "peerDependencies": { "@angular/core": "^6.1.0", - "rxjs": "^6.0.0" + "rxjs": "^6.1.0" }, "optionalDependencies": {} } diff --git a/packages/core/package.json b/packages/core/package.json index 71638bd..00d5c72 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@progress/jsdo-core", - "version": "6.0.0", + "version": "6.1.0", "description": "JSDO Core Module", "main": "lib/progress.core.js", "files": [ diff --git a/packages/core/readme.md b/packages/core/readme.md index e6e89ed..984106a 100644 --- a/packages/core/readme.md +++ b/packages/core/readme.md @@ -7,7 +7,7 @@ Progress® Data Objects, which include the JSDO on the client, represent the Pro ### JSDO and OpenEdge compatibility | JSDO version | OpenEdge version | |----|----| -| 6.0.0, 5.0.0 | 11.6.4, 11.7.x | +| 6.1.0, 5.0.0 | 11.6.4, 11.7.x | ### Download You can download a copy of the full JSDO to a zip file or the individual files below. diff --git a/packages/nativescript/package.json b/packages/nativescript/package.json index 0d8aee6..6545ae4 100644 --- a/packages/nativescript/package.json +++ b/packages/nativescript/package.json @@ -1,6 +1,6 @@ { "name": "@progress/jsdo-nativescript", - "version": "6.0.0", + "version": "6.1.0", "description": "The Progress Data Source is a TypeScript implementation - Progress Data Source class for NativeScript, Angular. This will provide a seamless integration between OpenEdge (Progress Data Object) with NativeScript", "main": "lib/progress.data.ns.js", "files": [ @@ -35,14 +35,14 @@ }, "homepage": "https://github.com/progress/JSDO#readme", "dependencies": { - "@progress/jsdo-core": "^6.0.0", + "@progress/jsdo-core": "^6.1.0", "base-64": "^0.1.0", "nativescript-localstorage": "^1.1.5", "zone.js": "^0.8.18" }, "peerDependencies": { "@angular/core": "^6.1.0", - "rxjs": "^6.0.0" + "rxjs": "^6.1.0" }, "optionalDependencies": {} } diff --git a/packages/ng-datasource/package.json b/packages/ng-datasource/package.json index 6e3ea9f..a3e24e4 100644 --- a/packages/ng-datasource/package.json +++ b/packages/ng-datasource/package.json @@ -1,6 +1,6 @@ { "name": "@progress/jsdo-nsds", - "version": "6.0.0", + "version": "6.1.0", "description": "The Progress Data Source is a TypeScript implementation - Progress Data Source class for NativeScript, Angular. This will provide a seamless integration between OpenEdge (Progress Data Object) with NativeScript", "main": "lib/progress.data.ng.ds.js", "files": [ @@ -40,14 +40,14 @@ }, "homepage": "https://github.com/progress/JSDO#readme", "dependencies": { - "@progress/jsdo-core": "^6.0.0", + "@progress/jsdo-core": "^6.1.0", "base-64": "^0.1.0", "node-localstorage": "^1.3.1", "xmlhttprequest": "^1.8.0" }, "peerDependencies": { "@angular/core": "^6.1.0", - "rxjs": "^6.0.0" + "rxjs": "^6.1.0" }, "optionalDependencies": {}, "devDependencies": { diff --git a/packages/ng-datasource/src/progress.data.ng.ds.ts b/packages/ng-datasource/src/progress.data.ng.ds.ts index b76ada3..96bd90a 100644 --- a/packages/ng-datasource/src/progress.data.ng.ds.ts +++ b/packages/ng-datasource/src/progress.data.ng.ds.ts @@ -1,5 +1,5 @@ /* -Progress Progress Data Source for Angular: 6.0.0 +Progress Progress Data Source for Angular: 6.1.0 Copyright 2017-2018 Progress Software Corporation and/or its subsidiaries or affiliates. @@ -15,7 +15,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -progress.data.ng.ds.ts Version: v6.0.0 +progress.data.ng.ds.ts Version: v6.1.0 Progress Data Source class for NativeScript, Angular. This will provide a seamless integration between OpenEdge (Progress Data Object) with NativeScript. diff --git a/packages/node/package.json b/packages/node/package.json index 0a63870..3a224b8 100644 --- a/packages/node/package.json +++ b/packages/node/package.json @@ -1,6 +1,6 @@ { "name": "@progress/jsdo-node", - "version": "6.0.0", + "version": "6.1.0", "description": "The Progress Data Source is a TypeScript implementation - Progress Data Source class for NativeScript, Angular and Node.js. This will provide a seamless integration between OpenEdge (Progress Data Object) with Node.js.", "main": "lib/progress.data.node.js", "files": [ @@ -37,12 +37,12 @@ }, "homepage": "https://github.com/progress/JSDO#readme", "dependencies": { - "@progress/jsdo-core": "^6.0.0", + "@progress/jsdo-core": "^6.1.0", "base-64": "^0.1.0", "node-localstorage": "^1.3.1", "xmlhttprequest": "^1.8.0", "@angular/core": "^6.1.0", - "rxjs": "^6.0.0" + "rxjs": "^6.1.0" }, "optionalDependencies": {}, "devDependencies": { diff --git a/readme.md b/readme.md index 953af28..0f8a186 100644 --- a/readme.md +++ b/readme.md @@ -8,7 +8,7 @@ Progress® Data Objects, which include the JSDO on the client, represent the Pro ### JSDO and OpenEdge compatibility | JSDO version | OpenEdge version | |----|----| -| 6.0.0, 5.0.0 | 11.6.3, 11.7.x | +| 6.1.0, 5.0.0 | 11.6.3, 11.7.x | ### Download You can download a copy of the full JSDO to a zip file or the individual files below. diff --git a/src/auth/progress.auth.basic.js b/src/auth/progress.auth.basic.js index eb1fe80..9719146 100644 --- a/src/auth/progress.auth.basic.js +++ b/src/auth/progress.auth.basic.js @@ -1,5 +1,5 @@ /* -progress.auth.basic.js Version: 6.0.0 +progress.auth.basic.js Version: 6.1.0 Copyright (c) 2016-2017 Progress Software Corporation and/or its subsidiaries or affiliates. diff --git a/src/auth/progress.auth.form.js b/src/auth/progress.auth.form.js index f429258..cd87a8b 100644 --- a/src/auth/progress.auth.form.js +++ b/src/auth/progress.auth.form.js @@ -1,5 +1,5 @@ /* -progress.auth.form.js Version: 6.0.0 +progress.auth.form.js Version: 6.1.0 Copyright (c) 2016-2018 Progress Software Corporation and/or its subsidiaries or affiliates. diff --git a/src/auth/progress.auth.js b/src/auth/progress.auth.js index 0c4b4e4..a6c36bf 100644 --- a/src/auth/progress.auth.js +++ b/src/auth/progress.auth.js @@ -1,5 +1,5 @@ /* -progress.auth.js Version: 6.0.0 +progress.auth.js Version: 6.1.0 Copyright (c) 2016-2017 Progress Software Corporation and/or its subsidiaries or affiliates. diff --git a/src/auth/progress.auth.sso.js b/src/auth/progress.auth.sso.js index 80d1485..dd13789 100644 --- a/src/auth/progress.auth.sso.js +++ b/src/auth/progress.auth.sso.js @@ -1,5 +1,5 @@ /* -progress.auth.sso.js Version: 6.0.0 +progress.auth.sso.js Version: 6.1.0 Copyright (c) 2016-2017 Progress Software Corporation and/or its subsidiaries or affiliates. diff --git a/src/progress.data.kendo.js b/src/progress.data.kendo.js index 58c2845..8e3c46b 100644 --- a/src/progress.data.kendo.js +++ b/src/progress.data.kendo.js @@ -1,6 +1,6 @@ /* -progress.data.kendo.js Version: 6.0.0 +progress.data.kendo.js Version: 6.1.0 Copyright (c) 2015-2018 Progress Software Corporation and/or its subsidiaries or affiliates. diff --git a/src/progress.js b/src/progress.js index bedf69f..acc5fbc 100644 --- a/src/progress.js +++ b/src/progress.js @@ -1,5 +1,5 @@ /* -progress.js Version: 6.0.0 +progress.js Version: 6.1.0 Copyright (c) 2012-2018 Progress Software Corporation and/or its subsidiaries or affiliates. diff --git a/src/progress.session.js b/src/progress.session.js index 2582a54..d5202e0 100644 --- a/src/progress.session.js +++ b/src/progress.session.js @@ -1,5 +1,5 @@ /* -progress.session.js Version: 6.0.0 +progress.session.js Version: 6.1.0 Copyright (c) 2012-2018 Progress Software Corporation and/or its subsidiaries or affiliates. diff --git a/src/progress.util.js b/src/progress.util.js index aa622cb..7b16ffb 100644 --- a/src/progress.util.js +++ b/src/progress.util.js @@ -1,7 +1,7 @@ /*eslint no-global-assign: ["error", {"exceptions": ["localStorage"]}]*/ /*global XMLHttpRequest:true, require, console, localStorage:true, sessionStorage:true, $:true, Promise, setTimeout */ /* -progress.util.js Version: 6.0.0 +progress.util.js Version: 6.1.0 Copyright (c) 2014-2018 Progress Software Corporation and/or its subsidiaries or affiliates. From 861785075bd18dbfcfe37b211fda87ff3bbaef94 Mon Sep 17 00:00:00 2001 From: Nicolette Date: Mon, 8 Oct 2018 15:02:51 -0400 Subject: [PATCH 04/59] ADAS-7344 update jsdo to next anticipated version --- lib/progress.all.js | 18 +++++++++--------- lib/progress.all.min.js | 2 +- lib/progress.jsdo.js | 16 ++++++++-------- lib/progress.jsdo.min.js | 2 +- package.json | 2 +- packages/angular/package.json | 6 +++--- packages/core/package.json | 2 +- packages/core/readme.md | 2 +- packages/nativescript/package.json | 6 +++--- packages/ng-datasource/package.json | 6 +++--- .../ng-datasource/src/progress.data.ng.ds.ts | 4 ++-- packages/node/package.json | 6 +++--- readme.md | 2 +- src/auth/progress.auth.basic.js | 2 +- src/auth/progress.auth.form.js | 2 +- src/auth/progress.auth.js | 2 +- src/auth/progress.auth.sso.js | 2 +- src/progress.data.kendo.js | 2 +- src/progress.js | 2 +- src/progress.session.js | 2 +- src/progress.util.js | 2 +- 21 files changed, 45 insertions(+), 45 deletions(-) diff --git a/lib/progress.all.js b/lib/progress.all.js index 128ad4d..56596d6 100644 --- a/lib/progress.all.js +++ b/lib/progress.all.js @@ -1,5 +1,5 @@ /* -Progress JSDO Version: 6.1.0 +Progress JSDO Version: 6.0.1 Copyright 2012-2018 Progress Software Corporation and/or its subsidiaries or affiliates. @@ -18,7 +18,7 @@ limitations under the License. /*eslint no-global-assign: ["error", {"exceptions": ["localStorage"]}]*/ /*global XMLHttpRequest:true, require, console, localStorage:true, sessionStorage:true, $:true, Promise, setTimeout */ /* -progress.util.js Version: 6.1.0 +progress.util.js Version: 6.0.1 Copyright (c) 2014-2018 Progress Software Corporation and/or its subsidiaries or affiliates. @@ -1095,7 +1095,7 @@ limitations under the License. }()); //# sourceURL=progress.jsdo.js /* -progress.js Version: 6.1.0 +progress.js Version: 6.0.1 Copyright (c) 2012-2018 Progress Software Corporation and/or its subsidiaries or affiliates. @@ -8727,7 +8727,7 @@ limitations under the License. //this is so that we can see the code in Chrome's Source tab when script is loaded via XHR //# sourceURL=progress.jsdo.js /* -progress.session.js Version: 6.1.0 +progress.session.js Version: 6.0.1 Copyright (c) 2012-2018 Progress Software Corporation and/or its subsidiaries or affiliates. @@ -13702,7 +13702,7 @@ if (typeof exports !== "undefined") { //# sourceURL=progress.jsdo.js /* -progress.auth.js Version: 6.1.0 +progress.auth.js Version: 6.0.1 Copyright (c) 2016-2017 Progress Software Corporation and/or its subsidiaries or affiliates. @@ -14173,7 +14173,7 @@ limitations under the License. //# sourceURL=progress.jsdo.js /* -progress.auth.basic.js Version: 6.1.0 +progress.auth.basic.js Version: 6.0.1 Copyright (c) 2016-2017 Progress Software Corporation and/or its subsidiaries or affiliates. @@ -14332,7 +14332,7 @@ limitations under the License. }()); //# sourceURL=progress.jsdo.js /* -progress.auth.form.js Version: 6.1.0 +progress.auth.form.js Version: 6.0.1 Copyright (c) 2016-2018 Progress Software Corporation and/or its subsidiaries or affiliates. @@ -14544,7 +14544,7 @@ limitations under the License. }()); //# sourceURL=progress.jsdo.js /* -progress.auth.sso.js Version: 6.1.0 +progress.auth.sso.js Version: 6.0.1 Copyright (c) 2016-2017 Progress Software Corporation and/or its subsidiaries or affiliates. @@ -15038,7 +15038,7 @@ limitations under the License. /* -progress.data.kendo.js Version: 6.1.0 +progress.data.kendo.js Version: 6.0.1 Copyright (c) 2015-2018 Progress Software Corporation and/or its subsidiaries or affiliates. diff --git a/lib/progress.all.min.js b/lib/progress.all.min.js index fb08783..81f07f1 100644 --- a/lib/progress.all.min.js +++ b/lib/progress.all.min.js @@ -1,5 +1,5 @@ /* -Progress JSDO Version: 6.1.0 +Progress JSDO Version: 6.0.1 Copyright 2012-2018 Progress Software Corporation and/or its subsidiaries or affiliates. diff --git a/lib/progress.jsdo.js b/lib/progress.jsdo.js index 47fa9bc..6507567 100644 --- a/lib/progress.jsdo.js +++ b/lib/progress.jsdo.js @@ -1,5 +1,5 @@ /* -Progress JSDO Version: 6.1.0 +Progress JSDO Version: 6.0.1 Copyright 2012-2018 Progress Software Corporation and/or its subsidiaries or affiliates. @@ -18,7 +18,7 @@ limitations under the License. /*eslint no-global-assign: ["error", {"exceptions": ["localStorage"]}]*/ /*global XMLHttpRequest:true, require, console, localStorage:true, sessionStorage:true, $:true, Promise, setTimeout */ /* -progress.util.js Version: 6.1.0 +progress.util.js Version: 6.0.1 Copyright (c) 2014-2018 Progress Software Corporation and/or its subsidiaries or affiliates. @@ -1095,7 +1095,7 @@ limitations under the License. }()); //# sourceURL=progress.jsdo.js /* -progress.js Version: 6.1.0 +progress.js Version: 6.0.1 Copyright (c) 2012-2018 Progress Software Corporation and/or its subsidiaries or affiliates. @@ -8727,7 +8727,7 @@ limitations under the License. //this is so that we can see the code in Chrome's Source tab when script is loaded via XHR //# sourceURL=progress.jsdo.js /* -progress.session.js Version: 6.1.0 +progress.session.js Version: 6.0.1 Copyright (c) 2012-2018 Progress Software Corporation and/or its subsidiaries or affiliates. @@ -13702,7 +13702,7 @@ if (typeof exports !== "undefined") { //# sourceURL=progress.jsdo.js /* -progress.auth.js Version: 6.1.0 +progress.auth.js Version: 6.0.1 Copyright (c) 2016-2017 Progress Software Corporation and/or its subsidiaries or affiliates. @@ -14173,7 +14173,7 @@ limitations under the License. //# sourceURL=progress.jsdo.js /* -progress.auth.basic.js Version: 6.1.0 +progress.auth.basic.js Version: 6.0.1 Copyright (c) 2016-2017 Progress Software Corporation and/or its subsidiaries or affiliates. @@ -14332,7 +14332,7 @@ limitations under the License. }()); //# sourceURL=progress.jsdo.js /* -progress.auth.form.js Version: 6.1.0 +progress.auth.form.js Version: 6.0.1 Copyright (c) 2016-2018 Progress Software Corporation and/or its subsidiaries or affiliates. @@ -14544,7 +14544,7 @@ limitations under the License. }()); //# sourceURL=progress.jsdo.js /* -progress.auth.sso.js Version: 6.1.0 +progress.auth.sso.js Version: 6.0.1 Copyright (c) 2016-2017 Progress Software Corporation and/or its subsidiaries or affiliates. diff --git a/lib/progress.jsdo.min.js b/lib/progress.jsdo.min.js index e461cfa..fc0f831 100644 --- a/lib/progress.jsdo.min.js +++ b/lib/progress.jsdo.min.js @@ -1,5 +1,5 @@ /* -Progress JSDO Version: 6.1.0 +Progress JSDO Version: 6.0.1 Copyright 2012-2018 Progress Software Corporation and/or its subsidiaries or affiliates. diff --git a/package.json b/package.json index dc56c8e..34aa8b5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@progress/jsdo", - "version": "6.1.0", + "version": "6.0.1", "description": "The JSDO is a JavaScript implementation of the CDO Specification published by Progress Software Corporation.\r The JSDO is a free and open-source full-featured implementation that can be used in web, mobile web and hybrid mobile apps.", "main": "lib/progress.all.min.js", "files": [ diff --git a/packages/angular/package.json b/packages/angular/package.json index 2cc2506..a4147f6 100644 --- a/packages/angular/package.json +++ b/packages/angular/package.json @@ -1,6 +1,6 @@ { "name": "@progress/jsdo-angular", - "version": "6.1.0", + "version": "6.0.1", "description": "The Progress Data Source is a TypeScript implementation - Progress Data Source class for NativeScript, Angular. This will provide a seamless integration between OpenEdge (Progress Data Object) with Angular.", "main": "lib/progress.data.angular.js", "files": [ @@ -33,11 +33,11 @@ }, "homepage": "https://github.com/progress/JSDO#readme", "dependencies": { - "@progress/jsdo-core": "^6.1.0" + "@progress/jsdo-core": "^6.0.1" }, "peerDependencies": { "@angular/core": "^6.1.0", - "rxjs": "^6.1.0" + "rxjs": "^6.0.0" }, "optionalDependencies": {} } diff --git a/packages/core/package.json b/packages/core/package.json index 00d5c72..1ef2040 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@progress/jsdo-core", - "version": "6.1.0", + "version": "6.0.1", "description": "JSDO Core Module", "main": "lib/progress.core.js", "files": [ diff --git a/packages/core/readme.md b/packages/core/readme.md index 984106a..901ba19 100644 --- a/packages/core/readme.md +++ b/packages/core/readme.md @@ -7,7 +7,7 @@ Progress® Data Objects, which include the JSDO on the client, represent the Pro ### JSDO and OpenEdge compatibility | JSDO version | OpenEdge version | |----|----| -| 6.1.0, 5.0.0 | 11.6.4, 11.7.x | +| 6.0.x, 5.0.0 | 11.6.4, 11.7.x | ### Download You can download a copy of the full JSDO to a zip file or the individual files below. diff --git a/packages/nativescript/package.json b/packages/nativescript/package.json index 6545ae4..013bb83 100644 --- a/packages/nativescript/package.json +++ b/packages/nativescript/package.json @@ -1,6 +1,6 @@ { "name": "@progress/jsdo-nativescript", - "version": "6.1.0", + "version": "6.0.1", "description": "The Progress Data Source is a TypeScript implementation - Progress Data Source class for NativeScript, Angular. This will provide a seamless integration between OpenEdge (Progress Data Object) with NativeScript", "main": "lib/progress.data.ns.js", "files": [ @@ -35,14 +35,14 @@ }, "homepage": "https://github.com/progress/JSDO#readme", "dependencies": { - "@progress/jsdo-core": "^6.1.0", + "@progress/jsdo-core": "^6.0.1", "base-64": "^0.1.0", "nativescript-localstorage": "^1.1.5", "zone.js": "^0.8.18" }, "peerDependencies": { "@angular/core": "^6.1.0", - "rxjs": "^6.1.0" + "rxjs": "^6.0.0" }, "optionalDependencies": {} } diff --git a/packages/ng-datasource/package.json b/packages/ng-datasource/package.json index a3e24e4..fd1ba19 100644 --- a/packages/ng-datasource/package.json +++ b/packages/ng-datasource/package.json @@ -1,6 +1,6 @@ { "name": "@progress/jsdo-nsds", - "version": "6.1.0", + "version": "6.0.1", "description": "The Progress Data Source is a TypeScript implementation - Progress Data Source class for NativeScript, Angular. This will provide a seamless integration between OpenEdge (Progress Data Object) with NativeScript", "main": "lib/progress.data.ng.ds.js", "files": [ @@ -40,14 +40,14 @@ }, "homepage": "https://github.com/progress/JSDO#readme", "dependencies": { - "@progress/jsdo-core": "^6.1.0", + "@progress/jsdo-core": "^6.0.1", "base-64": "^0.1.0", "node-localstorage": "^1.3.1", "xmlhttprequest": "^1.8.0" }, "peerDependencies": { "@angular/core": "^6.1.0", - "rxjs": "^6.1.0" + "rxjs": "^6.0.0" }, "optionalDependencies": {}, "devDependencies": { diff --git a/packages/ng-datasource/src/progress.data.ng.ds.ts b/packages/ng-datasource/src/progress.data.ng.ds.ts index 96bd90a..ecda8e8 100644 --- a/packages/ng-datasource/src/progress.data.ng.ds.ts +++ b/packages/ng-datasource/src/progress.data.ng.ds.ts @@ -1,5 +1,5 @@ /* -Progress Progress Data Source for Angular: 6.1.0 +Progress Progress Data Source for Angular: 6.0.1 Copyright 2017-2018 Progress Software Corporation and/or its subsidiaries or affiliates. @@ -15,7 +15,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -progress.data.ng.ds.ts Version: v6.1.0 +progress.data.ng.ds.ts Version: v6.0.1 Progress Data Source class for NativeScript, Angular. This will provide a seamless integration between OpenEdge (Progress Data Object) with NativeScript. diff --git a/packages/node/package.json b/packages/node/package.json index 3a224b8..60caaed 100644 --- a/packages/node/package.json +++ b/packages/node/package.json @@ -1,6 +1,6 @@ { "name": "@progress/jsdo-node", - "version": "6.1.0", + "version": "6.0.1", "description": "The Progress Data Source is a TypeScript implementation - Progress Data Source class for NativeScript, Angular and Node.js. This will provide a seamless integration between OpenEdge (Progress Data Object) with Node.js.", "main": "lib/progress.data.node.js", "files": [ @@ -37,12 +37,12 @@ }, "homepage": "https://github.com/progress/JSDO#readme", "dependencies": { - "@progress/jsdo-core": "^6.1.0", + "@progress/jsdo-core": "^6.0.1", "base-64": "^0.1.0", "node-localstorage": "^1.3.1", "xmlhttprequest": "^1.8.0", "@angular/core": "^6.1.0", - "rxjs": "^6.1.0" + "rxjs": "^6.0.0" }, "optionalDependencies": {}, "devDependencies": { diff --git a/readme.md b/readme.md index 0f8a186..8cfa9f7 100644 --- a/readme.md +++ b/readme.md @@ -8,7 +8,7 @@ Progress® Data Objects, which include the JSDO on the client, represent the Pro ### JSDO and OpenEdge compatibility | JSDO version | OpenEdge version | |----|----| -| 6.1.0, 5.0.0 | 11.6.3, 11.7.x | +| 6.0.x, 5.0.0 | 11.6.3, 11.7.x | ### Download You can download a copy of the full JSDO to a zip file or the individual files below. diff --git a/src/auth/progress.auth.basic.js b/src/auth/progress.auth.basic.js index 9719146..6982eaa 100644 --- a/src/auth/progress.auth.basic.js +++ b/src/auth/progress.auth.basic.js @@ -1,5 +1,5 @@ /* -progress.auth.basic.js Version: 6.1.0 +progress.auth.basic.js Version: 6.0.1 Copyright (c) 2016-2017 Progress Software Corporation and/or its subsidiaries or affiliates. diff --git a/src/auth/progress.auth.form.js b/src/auth/progress.auth.form.js index cd87a8b..378c9d9 100644 --- a/src/auth/progress.auth.form.js +++ b/src/auth/progress.auth.form.js @@ -1,5 +1,5 @@ /* -progress.auth.form.js Version: 6.1.0 +progress.auth.form.js Version: 6.0.1 Copyright (c) 2016-2018 Progress Software Corporation and/or its subsidiaries or affiliates. diff --git a/src/auth/progress.auth.js b/src/auth/progress.auth.js index a6c36bf..db16c25 100644 --- a/src/auth/progress.auth.js +++ b/src/auth/progress.auth.js @@ -1,5 +1,5 @@ /* -progress.auth.js Version: 6.1.0 +progress.auth.js Version: 6.0.1 Copyright (c) 2016-2017 Progress Software Corporation and/or its subsidiaries or affiliates. diff --git a/src/auth/progress.auth.sso.js b/src/auth/progress.auth.sso.js index dd13789..6e96f4c 100644 --- a/src/auth/progress.auth.sso.js +++ b/src/auth/progress.auth.sso.js @@ -1,5 +1,5 @@ /* -progress.auth.sso.js Version: 6.1.0 +progress.auth.sso.js Version: 6.0.1 Copyright (c) 2016-2017 Progress Software Corporation and/or its subsidiaries or affiliates. diff --git a/src/progress.data.kendo.js b/src/progress.data.kendo.js index 8e3c46b..0204cbc 100644 --- a/src/progress.data.kendo.js +++ b/src/progress.data.kendo.js @@ -1,6 +1,6 @@ /* -progress.data.kendo.js Version: 6.1.0 +progress.data.kendo.js Version: 6.0.1 Copyright (c) 2015-2018 Progress Software Corporation and/or its subsidiaries or affiliates. diff --git a/src/progress.js b/src/progress.js index acc5fbc..1c992ed 100644 --- a/src/progress.js +++ b/src/progress.js @@ -1,5 +1,5 @@ /* -progress.js Version: 6.1.0 +progress.js Version: 6.0.1 Copyright (c) 2012-2018 Progress Software Corporation and/or its subsidiaries or affiliates. diff --git a/src/progress.session.js b/src/progress.session.js index d5202e0..e593a27 100644 --- a/src/progress.session.js +++ b/src/progress.session.js @@ -1,5 +1,5 @@ /* -progress.session.js Version: 6.1.0 +progress.session.js Version: 6.0.1 Copyright (c) 2012-2018 Progress Software Corporation and/or its subsidiaries or affiliates. diff --git a/src/progress.util.js b/src/progress.util.js index 7b16ffb..9ca63cd 100644 --- a/src/progress.util.js +++ b/src/progress.util.js @@ -1,7 +1,7 @@ /*eslint no-global-assign: ["error", {"exceptions": ["localStorage"]}]*/ /*global XMLHttpRequest:true, require, console, localStorage:true, sessionStorage:true, $:true, Promise, setTimeout */ /* -progress.util.js Version: 6.1.0 +progress.util.js Version: 6.0.1 Copyright (c) 2014-2018 Progress Software Corporation and/or its subsidiaries or affiliates. From c0d764b9d2eb1a5dd41ea48f5cda4ad66f73c3ea Mon Sep 17 00:00:00 2001 From: Alan Estrada Date: Thu, 18 Oct 2018 01:33:09 +0800 Subject: [PATCH 05/59] Added a better fix where we don't invalidate the authProvider everytime. --- src/progress.session.js | 42 ++++++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/src/progress.session.js b/src/progress.session.js index 7c29838..c3a0ca7 100644 --- a/src/progress.session.js +++ b/src/progress.session.js @@ -4897,28 +4897,32 @@ limitations under the License. options.authProvider = authProvider; if (authProvider.hasClientCredentials()) { - // FAKE SESSION - let jsdosession = new progress.data.JSDOSession(options); + // FAKE SESSION + let jsdosession = new progress.data.JSDOSession(options), + statusCode = true; // This is a band-aid. We need to refactor and re-modularize // getSession() now that the team has a better understanding - // of async operations --aestrada aka yoloswaggins - jsdosession.isAuthorized().then(() => { - jsdosession.invalidate(); - loginHandler(authProvider); - }, - () => { - return Promise.all([ - jsdosession.invalidate(), - options.authProvider.logout() - ]); - }).then((values) => { - if (values) { - authProvider = new progress.data.AuthenticationProvider(authProviderInitObject); - options.authProvider = authProvider; - callLogin(authProvider); - } - }) + // of async operations --aestrada + jsdosession.isAuthorized().then(() => { + return jsdosession.invalidate(); + }, (obj) => { + statusCode = obj && obj.info && obj.info.xhr && obj.info.xhr.status; + return Promise.all([ + jsdosession.invalidate(), + options.authProvider.logout() + ]); + }).then(() => { + // If we have a 401, then we need to get rid of our old authProvider and try a fresh start + // Otherwise, we still good. + if (statusCode === 401) { + authProvider = new progress.data.AuthenticationProvider(authProviderInitObject); + options.authProvider = authProvider; + callLogin(authProvider); + } else { + loginHandler(authProvider); + } + }); } else { // If model is anon, just log in. if (authProvider.authenticationModel === progress.data.Session.AUTH_TYPE_ANON) { From 69177b78b864a1491f1f537edafa40bf67000a0b Mon Sep 17 00:00:00 2001 From: Alan Estrada Date: Thu, 18 Oct 2018 01:57:57 +0800 Subject: [PATCH 06/59] Added a proper unit test --- test/regressions/ADAS-9501.js | 51 +++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 test/regressions/ADAS-9501.js diff --git a/test/regressions/ADAS-9501.js b/test/regressions/ADAS-9501.js new file mode 100644 index 0000000..f7828f6 --- /dev/null +++ b/test/regressions/ADAS-9501.js @@ -0,0 +1,51 @@ +const chai = require('chai'); +const expect = chai.expect; +const chaiAsPromised = require("chai-as-promised"); + +const progress = require("../../build/progress.jsdo").progress; + +chai.use(chaiAsPromised); + +describe('ADAS-9501 - Refresh After Timeout Bjorks The Session', function () { + // INFORMATION YEAH + const options = { + catalogURI: "http://172.29.16.228:8810/Customer/static/CustomerService.json", + serviceURI: "http://172.29.16.228:8810/Customer/", + resourceName: "Customer", + username: "restuser", + password: "password", + authenticationModel: "form" + }; + + describe('Timeout Tests', function () { + it('should succesfully get a session and stuff ', function () { + let getSession = progress.data.getSession(options).then( + () => true, + () => false); + + return expect(getSession).to.eventually.be.true; + }); + + it('should timeout after 3 minutes', function () { + // Disables timeout + this.timeout(0); + + // Resolve a promise after 3 minutes + let timeout = new Promise((resolve, reject) => { + setTimeout(() => { + resolve(true); + }, 180000); + }); + + return expect(timeout).to.eventually.be.true; + }); + + it('should successfully be able to re-login after 3 minutes', function () { + let getSession = progress.data.getSession(options).then( + () => true, + () => false); + + return expect(getSession).to.eventually.be.true; + }); + }); +}); \ No newline at end of file From b8b311fb58d0efd3839a3588fb54070c588b12fb Mon Sep 17 00:00:00 2001 From: Alan Estrada Date: Fri, 19 Oct 2018 05:30:26 +0800 Subject: [PATCH 07/59] Adding a template.json --- src/progress.session.js | 3 +- test/regressions/ADAS-9501.js | 2 +- test/regressions/supertest.js | 51 ++++++++++ test/template/template.js | 169 ++++++++++++++++++++++++++++++++++ 4 files changed, 222 insertions(+), 3 deletions(-) create mode 100644 test/regressions/supertest.js create mode 100644 test/template/template.js diff --git a/src/progress.session.js b/src/progress.session.js index c3a0ca7..3bb97ed 100644 --- a/src/progress.session.js +++ b/src/progress.session.js @@ -4899,7 +4899,7 @@ limitations under the License. if (authProvider.hasClientCredentials()) { // FAKE SESSION let jsdosession = new progress.data.JSDOSession(options), - statusCode = true; + statusCode; // This is a band-aid. We need to refactor and re-modularize // getSession() now that the team has a better understanding @@ -4989,4 +4989,3 @@ limitations under the License. if (typeof exports !== "undefined") { exports.progress = progress; } - diff --git a/test/regressions/ADAS-9501.js b/test/regressions/ADAS-9501.js index f7828f6..8f9edb8 100644 --- a/test/regressions/ADAS-9501.js +++ b/test/regressions/ADAS-9501.js @@ -28,7 +28,7 @@ describe('ADAS-9501 - Refresh After Timeout Bjorks The Session', function () { it('should timeout after 3 minutes', function () { // Disables timeout - this.timeout(0); + this.timeout(200000); // Resolve a promise after 3 minutes let timeout = new Promise((resolve, reject) => { diff --git a/test/regressions/supertest.js b/test/regressions/supertest.js new file mode 100644 index 0000000..f7828f6 --- /dev/null +++ b/test/regressions/supertest.js @@ -0,0 +1,51 @@ +const chai = require('chai'); +const expect = chai.expect; +const chaiAsPromised = require("chai-as-promised"); + +const progress = require("../../build/progress.jsdo").progress; + +chai.use(chaiAsPromised); + +describe('ADAS-9501 - Refresh After Timeout Bjorks The Session', function () { + // INFORMATION YEAH + const options = { + catalogURI: "http://172.29.16.228:8810/Customer/static/CustomerService.json", + serviceURI: "http://172.29.16.228:8810/Customer/", + resourceName: "Customer", + username: "restuser", + password: "password", + authenticationModel: "form" + }; + + describe('Timeout Tests', function () { + it('should succesfully get a session and stuff ', function () { + let getSession = progress.data.getSession(options).then( + () => true, + () => false); + + return expect(getSession).to.eventually.be.true; + }); + + it('should timeout after 3 minutes', function () { + // Disables timeout + this.timeout(0); + + // Resolve a promise after 3 minutes + let timeout = new Promise((resolve, reject) => { + setTimeout(() => { + resolve(true); + }, 180000); + }); + + return expect(timeout).to.eventually.be.true; + }); + + it('should successfully be able to re-login after 3 minutes', function () { + let getSession = progress.data.getSession(options).then( + () => true, + () => false); + + return expect(getSession).to.eventually.be.true; + }); + }); +}); \ No newline at end of file diff --git a/test/template/template.js b/test/template/template.js new file mode 100644 index 0000000..5a7b3e0 --- /dev/null +++ b/test/template/template.js @@ -0,0 +1,169 @@ +const chai = require('chai'); +const expect = chai.expect; +const chaiAsPromised = require("chai-as-promised"); + +const progress = require("../build/progress.jsdo").progress; + +chai.use(chaiAsPromised); + +// These are the template suites and tests for people to steal and use! +// I've added as many possible scenarios as I could possibly think of + +describe('-- PUT THE BUG NAME HERE ----', () => { + + // INFORMATION IS HERE + // Put all of the data relevant to your test in this object. + const options = { + catalogURI: "https://oemobiledemo.progress.com/OEMobileDemoServices/static/CustomerService.json", + serviceURI: "https://oemobiledemo.progress.com/OEMobileDemoServices", + resourceName: "Customer", + authenticationModel: "anonymous", + CustName: "SmokeTest3000" + }; + + // Put all of your globals in this let statement, something that is going to be shared across + // multiple suites (every describe is a test suite) + let session, + jsdo; + + // Put all of the logic that you need done BEFORE ALL of the tests here + // Sometimes you might want to set up a JSDOSession, sometimes you won't. + // Make sure to call done! + before(function (done) { + progress.data.getSession(options).then((object) => { + session = object.jsdosession; + }).then(() => done(), () => done()); + }); + + // Put all of the logic to + after((done) => { + session.invalidate().then(() => done()); + }); + + describe('JSDO Instantiation Tests', function() { + it('should successfully create a JSDO', function() { + jsdo = new progress.data.JSDO({name: options.resourceName}); + expect(jsdo).to.be.an.instanceof(progress.data.JSDO); + }); + + it('should successfully call fill()', function() { + let fill = jsdo.fill().then((object) => { + return object.success; + }); + + return expect(fill).to.eventually.be.true; + }); + + it('should have a jsdo filled with actual data from the backend', function() { + expect(jsdo.hasData()).to.be.true; + }); + }); + + describe('JSDO CUD Tests', function () { + // Clean up the backend to make sure that there isn't an customer record with a CustNum of 3000 + // already in store + function clean(callback) { + jsdo.ttCustomer.foreach((customer) => { + if (customer.data.Name === CustName) { + customer.remove(); + } + }); + + jsdo.saveChanges().then(() => { + return jsdo.fill(); + }).then(() => callback()); + } + + before(function(done) { + clean(done); + }); + + after(function(done) { + clean(done); + }); + + it('should successfully create a record on the backend', function() { + jsdo.ttCustomer.add({ + Name: CustName, + SalesRep: 'NS', + Balance: '2.10', + State: 'MA', + }); + + let save = jsdo.saveChanges().then((object) => { + return jsdo.fill(); + }).then((object) => { + let found = false; + jsdo.ttCustomer.foreach((customer) => { + if (customer.data.Name === CustName) { + found = true; + } + }); + return found; + }); + + return expect(save).to.eventually.be.true; + }); + + it('should successfully update a record on the backend', function() { + const newState = "NH"; + jsdo.ttCustomer.foreach((customer) => { + if (customer.data.Name === CustName) { + customer.assign({State: newState}); + } + }); + + let save = jsdo.saveChanges().then((object) => { + return jsdo.fill(); + }).then((object) => { + let found = false; + jsdo.ttCustomer.foreach((customer) => { + if (customer.data.Name === CustName && customer.data.State === newState) { + found = true; + } + }); + return found; + }); + + return expect(save).to.eventually.be.true; + }); + + it('should fail to update a record to have the same primary index as another record', function() { + jsdo.ttCustomer.foreach((customer) => { + if (customer.data.Name === CustName) { + customer.assign({CustNum: 1}); + } + }); + + let save = jsdo.saveChanges().then((object) => { + return object.success; + }, function (object) { + return object.success; + }); + + return expect(save).to.eventually.be.false; + }); + + it('should successfully delete a record on the backend', function() { + jsdo.ttCustomer.foreach((customer) => { + if (customer.data.Name === CustName) { + customer.remove(); + } + }); + + let save = jsdo.saveChanges().then((object) => { + return jsdo.fill(); + }).then((object) => { + let found = false; + jsdo.ttCustomer.foreach((customer) => { + if (customer.data.Name === CustName) { + found = true; + } + }); + return found; + }); + + return expect(save).to.eventually.be.false; + }); + }); +}); \ No newline at end of file From fa7f9a135e3179317cdebd696a7c668a43dcdd8b Mon Sep 17 00:00:00 2001 From: Alan Estrada Date: Fri, 19 Oct 2018 06:01:13 +0800 Subject: [PATCH 08/59] Updated package.json to require typescript and linters --- packages/node/package.json | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/node/package.json b/packages/node/package.json index 60caaed..34aff74 100644 --- a/packages/node/package.json +++ b/packages/node/package.json @@ -15,7 +15,8 @@ "test": "npm run build:ds && mocha --recursive", "test:smokes": "npm run build:ds && mocha test/smoke*.js", "test:tc": "npm run build:ds && mocha --recursive --reporter mocha-teamcity-reporter", - "test:tc-smokes": "npm run build:ds && mocha test/smoke*.js --recursive --reporter mocha-teamcity-reporter" + "test:tc-smokes": "npm run build:ds && mocha test/smoke*.js --recursive --reporter mocha-teamcity-reporter", + "lint": "tslint --project ." }, "repository": { "type": "git", @@ -37,7 +38,7 @@ }, "homepage": "https://github.com/progress/JSDO#readme", "dependencies": { - "@progress/jsdo-core": "^6.0.1", + "@progress/jsdo-core": "^6.0.0", "base-64": "^0.1.0", "node-localstorage": "^1.3.1", "xmlhttprequest": "^1.8.0", @@ -51,6 +52,8 @@ "concat": "^1.0.3", "mkdirp": "^0.5.1", "mocha": "^5.2.0", - "mocha-teamcity-reporter": "^2.4.0" + "mocha-teamcity-reporter": "^2.4.0", + "tslint": "^5.11.0", + "typescript": "^3.1.3" } } From 3a8544aa05e7c57dc7656d7d76cc946454461b9b Mon Sep 17 00:00:00 2001 From: Alan Estrada Date: Fri, 19 Oct 2018 06:01:59 +0800 Subject: [PATCH 09/59] Adding a default tslint.json file --- .gitignore | 1 - packages/ng-datasource/tslint.json | 15 +++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 packages/ng-datasource/tslint.json diff --git a/.gitignore b/.gitignore index 2f350c6..1b8655a 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,6 @@ .vscode package-lock.json tmp -tslint.json node_modules/ scratch1/ scratch2/ diff --git a/packages/ng-datasource/tslint.json b/packages/ng-datasource/tslint.json new file mode 100644 index 0000000..b8ea832 --- /dev/null +++ b/packages/ng-datasource/tslint.json @@ -0,0 +1,15 @@ +{ + "defaultSeverity": "error", + "extends": [ + "tslint:recommended" + ], + "jsRules": {}, + "rules": { + "interface-name": [true, "never-prefix"], + "member-access": [true, "no-public"], + "no-string-literal": false, + "object-literal-shorthand": [false], + "variable-name": [true, "allow-leading-underscore"] + }, + "rulesDirectory": [] +} \ No newline at end of file From 18dcfda7ab6e9c92304815ae0281ad7f3dc8e09d Mon Sep 17 00:00:00 2001 From: Alan Estrada Date: Fri, 19 Oct 2018 06:17:47 +0800 Subject: [PATCH 10/59] Added an eslint devdependency and command to build it --- package.json | 2 ++ packages/ng-datasource/package.json | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 34aa8b5..ce17d33 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ ], "scripts": { "build:jsdo": "mkdirp build && concat -o build/progress.jsdo.js src/progress.util.js src/progress.js src/progress.session.js src/auth/progress.auth.js src/auth/progress.auth.basic.js src/auth/progress.auth.form.js src/auth/progress.auth.sso.js", + "lint": "eslint --quiet src/*", "test": "npm run build:jsdo && mocha --recursive", "test:smokes": "npm run build:jsdo && mocha test/smoke*.js", "test:tc-smokes": "npm run build:jsdo && mocha test/smoke*.js --recursive --reporter mocha-teamcity-reporter", @@ -42,6 +43,7 @@ "chai": "^4.1.2", "chai-as-promised": "^7.1.1", "concat": "^1.0.3", + "eslint": "^5.7.0", "mkdirp": "^0.5.1", "mocha": "^5.2.0", "mocha-teamcity-reporter": "^2.4.0", diff --git a/packages/ng-datasource/package.json b/packages/ng-datasource/package.json index fd1ba19..ac121ad 100644 --- a/packages/ng-datasource/package.json +++ b/packages/ng-datasource/package.json @@ -16,7 +16,8 @@ "test": "npm run build:ds && mocha --recursive", "test:smokes": "npm run build:ds && mocha test/smoke*.js", "test:tc": "npm run build:ds && mocha --recursive --reporter mocha-teamcity-reporter", - "test:tc-smokes": "npm run build:ds && mocha test/smoke*.js --recursive --reporter mocha-teamcity-reporter" + "test:tc-smokes": "npm run build:ds && mocha test/smoke*.js --recursive --reporter mocha-teamcity-reporter", + "lint": "eslint src/*" }, "repository": { "type": "git", From d8647b678a1cafb0f60dbe3a6cdf07df4aefa96f Mon Sep 17 00:00:00 2001 From: Alan Estrada Date: Mon, 22 Oct 2018 22:27:31 +0800 Subject: [PATCH 11/59] Removed some extraneous tests --- test/regressions/supertest.js | 51 ---------- test/template/template.js | 169 ---------------------------------- 2 files changed, 220 deletions(-) delete mode 100644 test/regressions/supertest.js delete mode 100644 test/template/template.js diff --git a/test/regressions/supertest.js b/test/regressions/supertest.js deleted file mode 100644 index f7828f6..0000000 --- a/test/regressions/supertest.js +++ /dev/null @@ -1,51 +0,0 @@ -const chai = require('chai'); -const expect = chai.expect; -const chaiAsPromised = require("chai-as-promised"); - -const progress = require("../../build/progress.jsdo").progress; - -chai.use(chaiAsPromised); - -describe('ADAS-9501 - Refresh After Timeout Bjorks The Session', function () { - // INFORMATION YEAH - const options = { - catalogURI: "http://172.29.16.228:8810/Customer/static/CustomerService.json", - serviceURI: "http://172.29.16.228:8810/Customer/", - resourceName: "Customer", - username: "restuser", - password: "password", - authenticationModel: "form" - }; - - describe('Timeout Tests', function () { - it('should succesfully get a session and stuff ', function () { - let getSession = progress.data.getSession(options).then( - () => true, - () => false); - - return expect(getSession).to.eventually.be.true; - }); - - it('should timeout after 3 minutes', function () { - // Disables timeout - this.timeout(0); - - // Resolve a promise after 3 minutes - let timeout = new Promise((resolve, reject) => { - setTimeout(() => { - resolve(true); - }, 180000); - }); - - return expect(timeout).to.eventually.be.true; - }); - - it('should successfully be able to re-login after 3 minutes', function () { - let getSession = progress.data.getSession(options).then( - () => true, - () => false); - - return expect(getSession).to.eventually.be.true; - }); - }); -}); \ No newline at end of file diff --git a/test/template/template.js b/test/template/template.js deleted file mode 100644 index 5a7b3e0..0000000 --- a/test/template/template.js +++ /dev/null @@ -1,169 +0,0 @@ -const chai = require('chai'); -const expect = chai.expect; -const chaiAsPromised = require("chai-as-promised"); - -const progress = require("../build/progress.jsdo").progress; - -chai.use(chaiAsPromised); - -// These are the template suites and tests for people to steal and use! -// I've added as many possible scenarios as I could possibly think of - -describe('-- PUT THE BUG NAME HERE ----', () => { - - // INFORMATION IS HERE - // Put all of the data relevant to your test in this object. - const options = { - catalogURI: "https://oemobiledemo.progress.com/OEMobileDemoServices/static/CustomerService.json", - serviceURI: "https://oemobiledemo.progress.com/OEMobileDemoServices", - resourceName: "Customer", - authenticationModel: "anonymous", - CustName: "SmokeTest3000" - }; - - // Put all of your globals in this let statement, something that is going to be shared across - // multiple suites (every describe is a test suite) - let session, - jsdo; - - // Put all of the logic that you need done BEFORE ALL of the tests here - // Sometimes you might want to set up a JSDOSession, sometimes you won't. - // Make sure to call done! - before(function (done) { - progress.data.getSession(options).then((object) => { - session = object.jsdosession; - }).then(() => done(), () => done()); - }); - - // Put all of the logic to - after((done) => { - session.invalidate().then(() => done()); - }); - - describe('JSDO Instantiation Tests', function() { - it('should successfully create a JSDO', function() { - jsdo = new progress.data.JSDO({name: options.resourceName}); - expect(jsdo).to.be.an.instanceof(progress.data.JSDO); - }); - - it('should successfully call fill()', function() { - let fill = jsdo.fill().then((object) => { - return object.success; - }); - - return expect(fill).to.eventually.be.true; - }); - - it('should have a jsdo filled with actual data from the backend', function() { - expect(jsdo.hasData()).to.be.true; - }); - }); - - describe('JSDO CUD Tests', function () { - // Clean up the backend to make sure that there isn't an customer record with a CustNum of 3000 - // already in store - function clean(callback) { - jsdo.ttCustomer.foreach((customer) => { - if (customer.data.Name === CustName) { - customer.remove(); - } - }); - - jsdo.saveChanges().then(() => { - return jsdo.fill(); - }).then(() => callback()); - } - - before(function(done) { - clean(done); - }); - - after(function(done) { - clean(done); - }); - - it('should successfully create a record on the backend', function() { - jsdo.ttCustomer.add({ - Name: CustName, - SalesRep: 'NS', - Balance: '2.10', - State: 'MA', - }); - - let save = jsdo.saveChanges().then((object) => { - return jsdo.fill(); - }).then((object) => { - let found = false; - jsdo.ttCustomer.foreach((customer) => { - if (customer.data.Name === CustName) { - found = true; - } - }); - return found; - }); - - return expect(save).to.eventually.be.true; - }); - - it('should successfully update a record on the backend', function() { - const newState = "NH"; - jsdo.ttCustomer.foreach((customer) => { - if (customer.data.Name === CustName) { - customer.assign({State: newState}); - } - }); - - let save = jsdo.saveChanges().then((object) => { - return jsdo.fill(); - }).then((object) => { - let found = false; - jsdo.ttCustomer.foreach((customer) => { - if (customer.data.Name === CustName && customer.data.State === newState) { - found = true; - } - }); - return found; - }); - - return expect(save).to.eventually.be.true; - }); - - it('should fail to update a record to have the same primary index as another record', function() { - jsdo.ttCustomer.foreach((customer) => { - if (customer.data.Name === CustName) { - customer.assign({CustNum: 1}); - } - }); - - let save = jsdo.saveChanges().then((object) => { - return object.success; - }, function (object) { - return object.success; - }); - - return expect(save).to.eventually.be.false; - }); - - it('should successfully delete a record on the backend', function() { - jsdo.ttCustomer.foreach((customer) => { - if (customer.data.Name === CustName) { - customer.remove(); - } - }); - - let save = jsdo.saveChanges().then((object) => { - return jsdo.fill(); - }).then((object) => { - let found = false; - jsdo.ttCustomer.foreach((customer) => { - if (customer.data.Name === CustName) { - found = true; - } - }); - return found; - }); - - return expect(save).to.eventually.be.false; - }); - }); -}); \ No newline at end of file From 27ad805e9deefa3c4ae35bc7fbd36d0bffe64ccb Mon Sep 17 00:00:00 2001 From: Alan Estrada Date: Tue, 23 Oct 2018 02:09:03 +0800 Subject: [PATCH 12/59] Updated Promise.all to progress.util.Deferred.when --- src/progress.session.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/progress.session.js b/src/progress.session.js index 3bb97ed..2f66f6c 100644 --- a/src/progress.session.js +++ b/src/progress.session.js @@ -4908,7 +4908,7 @@ limitations under the License. return jsdosession.invalidate(); }, (obj) => { statusCode = obj && obj.info && obj.info.xhr && obj.info.xhr.status; - return Promise.all([ + return progress.util.Deferred.when([ jsdosession.invalidate(), options.authProvider.logout() ]); From 0737d1ce8c12347b1b6717a873fad4aa6d44deb7 Mon Sep 17 00:00:00 2001 From: Alan Estrada Date: Tue, 23 Oct 2018 13:24:52 +0800 Subject: [PATCH 13/59] Fixed linting commands and put them on the right pkgs --- packages/ng-datasource/package.json | 2 +- packages/node/package.json | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/ng-datasource/package.json b/packages/ng-datasource/package.json index ac121ad..a770031 100644 --- a/packages/ng-datasource/package.json +++ b/packages/ng-datasource/package.json @@ -17,7 +17,7 @@ "test:smokes": "npm run build:ds && mocha test/smoke*.js", "test:tc": "npm run build:ds && mocha --recursive --reporter mocha-teamcity-reporter", "test:tc-smokes": "npm run build:ds && mocha test/smoke*.js --recursive --reporter mocha-teamcity-reporter", - "lint": "eslint src/*" + "lint": "tslint --project . --force" }, "repository": { "type": "git", diff --git a/packages/node/package.json b/packages/node/package.json index 34aff74..e39a982 100644 --- a/packages/node/package.json +++ b/packages/node/package.json @@ -15,8 +15,7 @@ "test": "npm run build:ds && mocha --recursive", "test:smokes": "npm run build:ds && mocha test/smoke*.js", "test:tc": "npm run build:ds && mocha --recursive --reporter mocha-teamcity-reporter", - "test:tc-smokes": "npm run build:ds && mocha test/smoke*.js --recursive --reporter mocha-teamcity-reporter", - "lint": "tslint --project ." + "test:tc-smokes": "npm run build:ds && mocha test/smoke*.js --recursive --reporter mocha-teamcity-reporter" }, "repository": { "type": "git", From 7e5d041fefc862eddb8ad2b97e0e69a7d6102912 Mon Sep 17 00:00:00 2001 From: Alan Estrada Date: Tue, 23 Oct 2018 13:51:55 +0800 Subject: [PATCH 14/59] Fixed some dependency issues --- packages/ng-datasource/package.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/ng-datasource/package.json b/packages/ng-datasource/package.json index a770031..da928bd 100644 --- a/packages/ng-datasource/package.json +++ b/packages/ng-datasource/package.json @@ -41,7 +41,7 @@ }, "homepage": "https://github.com/progress/JSDO#readme", "dependencies": { - "@progress/jsdo-core": "^6.0.1", + "@progress/jsdo-core": "^6.0.0", "base-64": "^0.1.0", "node-localstorage": "^1.3.1", "xmlhttprequest": "^1.8.0" @@ -57,6 +57,8 @@ "concat": "^1.0.3", "mkdirp": "^0.5.1", "mocha": "^5.2.0", - "mocha-teamcity-reporter": "^2.4.0" + "mocha-teamcity-reporter": "^2.4.0", + "tslint": "^5.11.0", + "typescript": "^3.1.3" } } From e2b8ea0ef09cfe2396f9ad4b021e7a972434f6ff Mon Sep 17 00:00:00 2001 From: Alan Estrada Date: Tue, 23 Oct 2018 23:41:29 +0800 Subject: [PATCH 15/59] Miscalled invalidate() too early in the authorization --- src/progress.session.js | 40 +++++++++++++++++++--------------------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/src/progress.session.js b/src/progress.session.js index 9aa1c71..07a804b 100644 --- a/src/progress.session.js +++ b/src/progress.session.js @@ -4748,8 +4748,8 @@ limitations under the License. progress.data.getSession = function (options) { var deferred = new progress.util.Deferred(), authProvider, - promise, - authProviderInitObject = {}; + authProviderInitObject = {}, + session; // This is the reject handler for session-related operations // login, addCatalog, and logout @@ -4777,26 +4777,23 @@ limitations under the License. } function loginHandler(object) { - var jsdosession; + let jsdosession; try { - jsdosession = new progress.data.JSDOSession(options); - try { - jsdosession.isAuthorized() - .then(function() { - return jsdosession.addCatalog(options.catalogURI); - }, sessionRejectHandler) - .then(function (object, result, info) { - object = progress.util.Deferred.getParamObject(object, result, info); - deferred.resolve(object.jsdosession, progress.data.Session.SUCCESS); - }, sessionRejectHandler); - } catch (e) { - sessionRejectHandler( - jsdosession, - progress.data.Session.GENERAL_FAILURE, - {errorObject: e} - ); + if (typeof session === "undefined") { + jsdosession = new progress.data.JSDOSession(options); + } else { + jsdosession = session; } + + jsdosession.isAuthorized() + .then(function() { + return jsdosession.addCatalog(options.catalogURI); + }, sessionRejectHandler) + .then(function (object, result, info) { + object = progress.util.Deferred.getParamObject(object, result, info); + deferred.resolve(object.jsdosession, progress.data.Session.SUCCESS); + }, sessionRejectHandler); } catch (ex) { sessionRejectHandler( jsdosession, @@ -4924,13 +4921,14 @@ limitations under the License. if (authProvider.hasClientCredentials()) { // FAKE SESSION let jsdosession = new progress.data.JSDOSession(options), - statusCode; + statusCode = 0; // This is a band-aid. We need to refactor and re-modularize // getSession() now that the team has a better understanding // of async operations --aestrada jsdosession.isAuthorized().then(() => { - return jsdosession.invalidate(); + session = jsdosession; + return; }, (obj) => { statusCode = obj && obj.info && obj.info.xhr && obj.info.xhr.status; return progress.util.Deferred.when([ From e9c70354b62db03c277dff1210f1da140720c722 Mon Sep 17 00:00:00 2001 From: Alan Estrada Date: Mon, 29 Oct 2018 22:29:23 +0800 Subject: [PATCH 16/59] Merging PR-121 --- package.json | 1 - packages/ng-datasource/package.json | 1 - packages/node/package.json | 1 - src/progress.util.js | 27 ++++++++++++--------------- 4 files changed, 12 insertions(+), 18 deletions(-) diff --git a/package.json b/package.json index ce17d33..f36f4fa 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,6 @@ "mkdirp": "^0.5.1", "mocha": "^5.2.0", "mocha-teamcity-reporter": "^2.4.0", - "node-localstorage": "^1.3.1", "xmlhttprequest": "^1.8.0" } } diff --git a/packages/ng-datasource/package.json b/packages/ng-datasource/package.json index da928bd..f4591a5 100644 --- a/packages/ng-datasource/package.json +++ b/packages/ng-datasource/package.json @@ -43,7 +43,6 @@ "dependencies": { "@progress/jsdo-core": "^6.0.0", "base-64": "^0.1.0", - "node-localstorage": "^1.3.1", "xmlhttprequest": "^1.8.0" }, "peerDependencies": { diff --git a/packages/node/package.json b/packages/node/package.json index e39a982..6ff669f 100644 --- a/packages/node/package.json +++ b/packages/node/package.json @@ -39,7 +39,6 @@ "dependencies": { "@progress/jsdo-core": "^6.0.0", "base-64": "^0.1.0", - "node-localstorage": "^1.3.1", "xmlhttprequest": "^1.8.0", "@angular/core": "^6.1.0", "rxjs": "^6.0.0" diff --git a/src/progress.util.js b/src/progress.util.js index 9ca63cd..6248a1d 100644 --- a/src/progress.util.js +++ b/src/progress.util.js @@ -35,7 +35,6 @@ limitations under the License. // Required packages should be installed before loading progress-jsdo. // Node.js: // - xmlhttprequest - // - node-localstorage // NativeScript: // - nativescript-localstorage // - base-64 @@ -44,12 +43,20 @@ limitations under the License. isNodeJS = false; var pkg_xmlhttprequest = "xmlhttprequest", - pkg_nodeLocalstorage = "node-localstorage", pkg_nativescriptLocalstorage = "nativescript-localstorage", pkg_fileSystemAccess = "file-system/file-system-access", pkg_base64 = "base-64" ; + //In memory localStorage emulation used for node + function LocalStorageEmulation() { + this._data = {}; + }; + LocalStorageEmulation.prototype.setItem = function(id, val) { return this._data[id] = String(val); }, + LocalStorageEmulation.prototype.getItem = function(id) { return this._data.hasOwnProperty(id) ? this._data[id] : undefined; }, + LocalStorageEmulation.prototype.removeItem = function(id) { return delete this._data[id]; }, + LocalStorageEmulation.prototype.clear = function() { return this._data = {}; } + // If XMLHttpRequest is undefined, enviroment would appear to be Node.js // load xmlhttprequest module // Web browser and NativeScript clients have a built-in XMLHttpRequest object @@ -106,23 +113,13 @@ limitations under the License. } } - // If environment is NodeJS, load module node-localstorage if (isNodeJS) { - var LocalStorage; if (typeof localStorage === "undefined") { - try { - var module = require("" + pkg_nodeLocalstorage); - LocalStorage = module.LocalStorage; - localStorage = new LocalStorage('./scratch1'); - } catch(e) { - console.error("Error: JSDO library requires localStorage and sessionStorage objects in Node.js.\n" - + "Please install node-localstorage package."); - } + localStorage = new LocalStorageEmulation(); } - if (typeof sessionStorage === "undefined" - && typeof LocalStorage !== "undefined") { - sessionStorage = new LocalStorage('./scratch2'); + if (typeof sessionStorage === "undefined") { + sessionStorage = new LocalStorageEmulation(); } // load module base-64 From 84049a5ae3b8ba921489bc1d031154933822456f Mon Sep 17 00:00:00 2001 From: Edsel Garcia Cyntje Date: Wed, 5 Dec 2018 06:40:17 -0500 Subject: [PATCH 17/59] Update license file --- LICENSE | 183 ++++---------------------------------------------------- 1 file changed, 10 insertions(+), 173 deletions(-) diff --git a/LICENSE b/LICENSE index d9a10c0..984d374 100644 --- a/LICENSE +++ b/LICENSE @@ -1,176 +1,13 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ + Copyright 2018 Progress Software Corporation - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at - 1. Definitions. + http://www.apache.org/licenses/LICENSE-2.0 - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. From 643bf53a94273802511f9a9f45b58b74cac0b5a8 Mon Sep 17 00:00:00 2001 From: edselg Date: Thu, 6 Dec 2018 10:55:02 -0500 Subject: [PATCH 18/59] Update LICENSE --- LICENSE | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index 984d374..0eaa543 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,5 @@ - Copyright 2018 Progress Software Corporation + Copyright © 2018 Progress Software Corporation and/or one + of its subsidiaries or affiliates. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. From e059d14b3b4613db2e685303555ca97091e4dd22 Mon Sep 17 00:00:00 2001 From: edselg Date: Thu, 6 Dec 2018 10:58:51 -0500 Subject: [PATCH 19/59] Update LICENSE --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index 0eaa543..78a4d02 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ - Copyright © 2018 Progress Software Corporation and/or one + Copyright © 2013-2018 Progress Software Corporation and/or one of its subsidiaries or affiliates. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); From 3014c55b3d77ed3fdf843d2de09062ef72097d1a Mon Sep 17 00:00:00 2001 From: Christian Bryan Date: Wed, 13 Feb 2019 14:43:28 +0000 Subject: [PATCH 20/59] Adding the tableRef property of the JSDO Parameters to the Filter Parameter so that the backend can use this information to actually know which Business Entity Table the query filter string is intended for --- src/progress.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/progress.js b/src/progress.js index bedf69f..8964131 100644 --- a/src/progress.js +++ b/src/progress.js @@ -7175,8 +7175,17 @@ limitations under the License. } } + // Christian Bryan - 10.02.2019 Add this back in + // Mike Fechner, Consultingwerk Ltd. 16.03.2016 + // Adding the tableRef property of the JSDO Parameters to + // the Filter Parameter so that the backend can use this + // information to actually know which Business Entity Table + // the query filter string is intended for ... + filter = JSON.stringify({ ablFilter: ablFilter, + tableRef: params.tableRef, + viewTables: jsdo.viewTables, sqlQuery: sqlQuery, orderBy: sortFields, skip: params.skip, From f07c4b8a64fee54bbf192f2de216e6324e1fed18 Mon Sep 17 00:00:00 2001 From: Edsel Garcia Cyntje Date: Thu, 28 Feb 2019 10:44:55 -0500 Subject: [PATCH 21/59] Add unit test --- test/test.tableref_viewtables.js | 76 ++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 test/test.tableref_viewtables.js diff --git a/test/test.tableref_viewtables.js b/test/test.tableref_viewtables.js new file mode 100644 index 0000000..8edc12f --- /dev/null +++ b/test/test.tableref_viewtables.js @@ -0,0 +1,76 @@ +process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; + +const chai = require("chai"); +const expect = chai.expect; +const chaiAsPromised = require("chai-as-promised"); + +const progress = require("../build/progress.jsdo").progress; + +chai.use(chaiAsPromised); + +const TABLEREF_VALUE = "ttCustomer"; +const VIEW_TABLES_VALUE = "ttCustomer"; + +describe("JSDO Smoke Tests", () => { + const options = { + catalogURI: "https://oemobiledemo.progress.com/OEMobileDemoServices/static/CustomerService.json", + serviceURI: "https://oemobiledemo.progress.com/OEMobileDemoServices/", + resourceName: "Customer", + authenticationModel: "anonymous" + }; + + let session, + jsdo, + filterObject; + + before(function (done) { + progress.data.getSession(options).then((object) => { + session = object.jsdosession; + }).then(() => done(), () => done()); + }); + + // Logout of the session after we are done + after((done) => { + session.invalidate().then(() => done()); + }); + + describe("JSDO Instantiation Tests", function() { + it("should successfully create a JSDO", function() { + jsdo = new progress.data.JSDO({name: options.resourceName}); + jsdo.viewTables = "ttCustomer"; + jsdo.subscribe("afterFill", function (jsdo, success, request) { + filterObject = JSON.parse(request.objParam.filter); + }); + expect(jsdo).to.be.an.instanceof(progress.data.JSDO); + }); + + it("should successfully call fill()", function() { + let fill = jsdo.fill({ + tableRef: "ttCustomer", + filter: { + field: "CustNum", + operator: "lte", + value: 11 + } + }).then((object) => { + console.log("DEBUG: afterFill: ", filterObject); + return object.success; + }); + + return expect(fill).to.eventually.be.true; + }); + + it("should have a jsdo filled with actual data from the backend", function() { + expect(jsdo.hasData()).to.be.true; + }); + + it("should have a tableRef property with the expected string value in the filter object of the request", function() { + expect(filterObject.tableRef).to.be.an("string").equals(TABLEREF_VALUE); + }); + + it("should have a viewTables property with the expected string value in the filter object of the request", function() { + expect(filterObject.viewTables).to.be.an("string").equals(VIEW_TABLES_VALUE); + }); + + }); +}); \ No newline at end of file From a196b8c6834a4a14dca65f03eb179ddbd5e3748b Mon Sep 17 00:00:00 2001 From: Alan Estrada Date: Wed, 13 Mar 2019 13:42:47 -0400 Subject: [PATCH 22/59] initial commit --- src/progress.session.js | 2 +- test/adas-808.js | 50 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 test/adas-808.js diff --git a/src/progress.session.js b/src/progress.session.js index 07a804b..be1578d 100644 --- a/src/progress.session.js +++ b/src/progress.session.js @@ -797,7 +797,7 @@ limitations under the License. // connects to online the last time it was checked? // (value is always false if session is not logged in) oepingAvailable = false, - defaultPartialPingURI = "/rest/_oeping", + defaultPartialPingURI = "/rest/_oepingService/_oeping", partialPingURI = defaultPartialPingURI, _storageKey, _authProvider = null, diff --git a/test/adas-808.js b/test/adas-808.js new file mode 100644 index 0000000..ebf46e7 --- /dev/null +++ b/test/adas-808.js @@ -0,0 +1,50 @@ +const chai = require('chai'); +const expect = chai.expect; +const chaiAsPromised = require("chai-as-promised"); + +const progress = require("../build/progress.jsdo").progress; + +chai.use(chaiAsPromised); + +process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0 + +describe('JSDO Smoke Tests', () => { + // INFORMATION YEAH + const options = { + catalogURI: "https://oemobiledemo.progress.com/OEMobileDemoServices/static/SportsService.json", + serviceURI: "https://oemobiledemo.progress.com/OEMobileDemoServices/", + resourceName: "Customer", + authenticationModel: "anonymous" + }; + + let session, + jsdo; + + before(function (done) { + progress.data.invalidateAllSessions(); + progress.data.getSession(options).then((object) => { + console.log("we created a JSDOSESSION"); + session = object.jsdosession; + }, (obj) => { + console.log("we did not create a JSDOSESSION"); + console.log(obj); + }).then(() => done(), () => done()); + }); + + // Logout of the session after we are done + after((done) => { + session.invalidate().then(() => done()); + }); + + describe('JSDO Instantiation Tests', function() { + it('should successfully call ping()', function() { + let ping = session.ping().then((obj) => { + console.log(obj.result); + console.log(obj.info); + return obj.result; + }); + + return expect(ping).to.eventually.be.true; + }); + }); +}); \ No newline at end of file From aa3c1525232a33669f16d16bd4ed7960bd84fb2c Mon Sep 17 00:00:00 2001 From: Alan Estrada Date: Tue, 19 Mar 2019 18:33:36 -0400 Subject: [PATCH 23/59] Updated the session object to be smarter about what URI to use The session will now test to see if the new PASOE oePingService is there. If it isn't, then it defaults to using the old classic appserver ping endpoint --- src/progress.session.js | 129 +++++++++++++++++++++++++++------------- 1 file changed, 89 insertions(+), 40 deletions(-) diff --git a/src/progress.session.js b/src/progress.session.js index be1578d..6e18fcf 100644 --- a/src/progress.session.js +++ b/src/progress.session.js @@ -797,7 +797,9 @@ limitations under the License. // connects to online the last time it was checked? // (value is always false if session is not logged in) oepingAvailable = false, + hasResolvedPingURI = false, defaultPartialPingURI = "/rest/_oepingService/_oeping", + classicPartialPingURI = "/rest/_oeping", partialPingURI = defaultPartialPingURI, _storageKey, _authProvider = null, @@ -2959,6 +2961,46 @@ limitations under the License. } }; + var resolvePingURI = () => { + var xhr = new XMLHttpRequest(), + deferred = new progress.util.Deferred(); + + // if we've resolved the pingURI OR we haven't logged in, then we don't have to do anything + if (hasResolvedPingURI || (this.loginResult !== progress.data.Session.LOGIN_SUCCESS && !this.authProvider)) { + deferred.resolve(true); + } else { + this._openRequest( + xhr, + "GET", + partialPingURI, + true, + () => { + xhr.onreadystatechange = () => { + var cbresult, info; + if (xhr.readyState === 4) { + // If we can't find the new ping endpoint, we go back to the Classic Ping URI. + if (xhr.responseText.indexOf("No service was found.") !== -1) { + setPartialPingURI(classicPartialPingURI); + deferred.reject(false); + } else { + deferred.resolve(true); + } + hasResolvedPingURI = true; + } + }; + + try { + xhr.send(); + } catch (e) { + throw new Error("Ping encountered a really bad error: " + e.message); + } + } + ); + } + + return deferred.promise(); + } + /* * args: pingURI * async @@ -2970,49 +3012,56 @@ limitations under the License. var xhr = new XMLHttpRequest(), that = this; - function sendPingAfterOpen() { - if (args.async) { - xhr.onreadystatechange = args.onReadyStateFn; - xhr.onCompleteFn = args.onCompleteFn; - xhr._jsdosession = jsdosession; // in case the Session is part of a JSDOSession - xhr._deferred = args.deferred; // in case the Session is part of a JSDOSession - } - progress.data.Session._setNoCacheHeaders(xhr); - // set X-CLIENT-PROPS header - setRequestHeaderFromContextProps(that, xhr); - if (that.authenticationModel === progress.data.Session.AUTH_TYPE_FORM) { - _addWithCredentialsAndAccept( - xhr, - "application/json,text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" - ); + resolvePingURI().then(() => { + // do nothing on success because the new oePingService was found + }, () => { + // re-create the pingURI since we changed to the old classic AppServer ping URI + args.pingURI = this._makePingURI(); + }).then(() => { + function sendPingAfterOpen() { + if (args.async) { + xhr.onreadystatechange = args.onReadyStateFn; + xhr.onCompleteFn = args.onCompleteFn; + xhr._jsdosession = jsdosession; // in case the Session is part of a JSDOSession + xhr._deferred = args.deferred; // in case the Session is part of a JSDOSession + } + progress.data.Session._setNoCacheHeaders(xhr); + // set X-CLIENT-PROPS header + setRequestHeaderFromContextProps(that, xhr); + if (that.authenticationModel === progress.data.Session.AUTH_TYPE_FORM) { + _addWithCredentialsAndAccept( + xhr, + "application/json,text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" + ); + } + xhr.send(null); } - xhr.send(null); - } - - try { - if (this._authProvider) { - this._authProvider._openRequestAndAuthorize( - xhr, - 'GET', - args.pingURI, - args.async, - sendPingAfterOpen - ); - } else { - // get rid of this if we do away with synchronous support (i.e., customer use of - // old Session API) - this._setXHRCredentials(xhr, "GET", args.pingURI, this.userName, _password, args.async); - - // Sending the XHR request after opening the channel - if (xhr.readyState === 1) { - sendPingAfterOpen(); + + try { + if (this._authProvider) { + this._authProvider._openRequestAndAuthorize( + xhr, + 'GET', + args.pingURI, + args.async, + sendPingAfterOpen + ); + } else { + // get rid of this if we do away with synchronous support (i.e., customer use of + // old Session API) + this._setXHRCredentials(xhr, "GET", args.pingURI, this.userName, _password, args.async); + + // Sending the XHR request after opening the channel + if (xhr.readyState === 1) { + sendPingAfterOpen(); + } } + } catch (e) { + args.error = e; } - } catch (e) { - args.error = e; - } - - args.xhr = xhr; + + args.xhr = xhr; + }) }; this._makePingURI = function () { From b4336e3a9abf76b457705c4dc35ad2a34f1e0373 Mon Sep 17 00:00:00 2001 From: Alan Estrada Date: Tue, 19 Mar 2019 18:36:37 -0400 Subject: [PATCH 24/59] Delete adas-808.js --- test/adas-808.js | 50 ------------------------------------------------ 1 file changed, 50 deletions(-) delete mode 100644 test/adas-808.js diff --git a/test/adas-808.js b/test/adas-808.js deleted file mode 100644 index ebf46e7..0000000 --- a/test/adas-808.js +++ /dev/null @@ -1,50 +0,0 @@ -const chai = require('chai'); -const expect = chai.expect; -const chaiAsPromised = require("chai-as-promised"); - -const progress = require("../build/progress.jsdo").progress; - -chai.use(chaiAsPromised); - -process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0 - -describe('JSDO Smoke Tests', () => { - // INFORMATION YEAH - const options = { - catalogURI: "https://oemobiledemo.progress.com/OEMobileDemoServices/static/SportsService.json", - serviceURI: "https://oemobiledemo.progress.com/OEMobileDemoServices/", - resourceName: "Customer", - authenticationModel: "anonymous" - }; - - let session, - jsdo; - - before(function (done) { - progress.data.invalidateAllSessions(); - progress.data.getSession(options).then((object) => { - console.log("we created a JSDOSESSION"); - session = object.jsdosession; - }, (obj) => { - console.log("we did not create a JSDOSESSION"); - console.log(obj); - }).then(() => done(), () => done()); - }); - - // Logout of the session after we are done - after((done) => { - session.invalidate().then(() => done()); - }); - - describe('JSDO Instantiation Tests', function() { - it('should successfully call ping()', function() { - let ping = session.ping().then((obj) => { - console.log(obj.result); - console.log(obj.info); - return obj.result; - }); - - return expect(ping).to.eventually.be.true; - }); - }); -}); \ No newline at end of file From 8bb60769943f596fbd5b22d5d436ddffa8cea2ac Mon Sep 17 00:00:00 2001 From: Alan Estrada Date: Wed, 20 Mar 2019 15:04:59 -0400 Subject: [PATCH 25/59] less function soup and better status code handling --- src/progress.session.js | 83 +++++++++++++++++------------------------ 1 file changed, 35 insertions(+), 48 deletions(-) diff --git a/src/progress.session.js b/src/progress.session.js index 6e18fcf..4a8ccf6 100644 --- a/src/progress.session.js +++ b/src/progress.session.js @@ -2965,37 +2965,24 @@ limitations under the License. var xhr = new XMLHttpRequest(), deferred = new progress.util.Deferred(); + xhr.onreadystatechange = () => { + if (xhr.readyState === 4) { + // If we can't find the new ping endpoint, we go back to the Classic Ping URI. + if (xhr.status === 404) { + setPartialPingURI(classicPartialPingURI); + deferred.reject(false); + } else { + deferred.resolve(true); + } + hasResolvedPingURI = true; + } + }; + // if we've resolved the pingURI OR we haven't logged in, then we don't have to do anything if (hasResolvedPingURI || (this.loginResult !== progress.data.Session.LOGIN_SUCCESS && !this.authProvider)) { deferred.resolve(true); } else { - this._openRequest( - xhr, - "GET", - partialPingURI, - true, - () => { - xhr.onreadystatechange = () => { - var cbresult, info; - if (xhr.readyState === 4) { - // If we can't find the new ping endpoint, we go back to the Classic Ping URI. - if (xhr.responseText.indexOf("No service was found.") !== -1) { - setPartialPingURI(classicPartialPingURI); - deferred.reject(false); - } else { - deferred.resolve(true); - } - hasResolvedPingURI = true; - } - }; - - try { - xhr.send(); - } catch (e) { - throw new Error("Ping encountered a really bad error: " + e.message); - } - } - ); + this._openRequest(xhr, "GET", partialPingURI, true, () => xhr.send()); } return deferred.promise(); @@ -3012,31 +2999,33 @@ limitations under the License. var xhr = new XMLHttpRequest(), that = this; + args.xhr = xhr; + + function sendPingAfterOpen() { + if (args.async) { + xhr.onreadystatechange = args.onReadyStateFn; + xhr.onCompleteFn = args.onCompleteFn; + xhr._jsdosession = jsdosession; // in case the Session is part of a JSDOSession + xhr._deferred = args.deferred; // in case the Session is part of a JSDOSession + } + progress.data.Session._setNoCacheHeaders(xhr); + // set X-CLIENT-PROPS header + setRequestHeaderFromContextProps(that, xhr); + if (that.authenticationModel === progress.data.Session.AUTH_TYPE_FORM) { + _addWithCredentialsAndAccept( + xhr, + "application/json,text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" + ); + } + xhr.send(null); + } + resolvePingURI().then(() => { // do nothing on success because the new oePingService was found }, () => { // re-create the pingURI since we changed to the old classic AppServer ping URI args.pingURI = this._makePingURI(); }).then(() => { - function sendPingAfterOpen() { - if (args.async) { - xhr.onreadystatechange = args.onReadyStateFn; - xhr.onCompleteFn = args.onCompleteFn; - xhr._jsdosession = jsdosession; // in case the Session is part of a JSDOSession - xhr._deferred = args.deferred; // in case the Session is part of a JSDOSession - } - progress.data.Session._setNoCacheHeaders(xhr); - // set X-CLIENT-PROPS header - setRequestHeaderFromContextProps(that, xhr); - if (that.authenticationModel === progress.data.Session.AUTH_TYPE_FORM) { - _addWithCredentialsAndAccept( - xhr, - "application/json,text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" - ); - } - xhr.send(null); - } - try { if (this._authProvider) { this._authProvider._openRequestAndAuthorize( @@ -3059,8 +3048,6 @@ limitations under the License. } catch (e) { args.error = e; } - - args.xhr = xhr; }) }; From 31fdd349e6e35afda3a8245901f23981c667d405 Mon Sep 17 00:00:00 2001 From: Damon Benson Date: Mon, 25 Mar 2019 20:55:21 -0400 Subject: [PATCH 26/59] ADAS-15578 Update Version and copyright information from develop branch --- LICENSE | 2 +- contributing.md | 92 +- notice.txt | 2 +- packages/angular/notice.txt | 3 +- packages/core/notice.txt | 5 +- packages/core/readme.md | 9 +- packages/nativescript/notice.txt | 8 +- packages/ng-datasource/package.json | 124 +- .../ng-datasource/src/progress.data.ng.ds.ts | 1596 +++++++++-------- packages/node/notice.txt | 11 +- packages/node/package.json | 112 +- readme.md | 47 +- src/auth/progress.auth.basic.js | 3 +- src/auth/progress.auth.bearer.js | 4 +- src/auth/progress.auth.form.js | 3 +- src/auth/progress.auth.js | 3 +- src/auth/progress.auth.sso.js | 3 +- src/progress.data.kendo.js | 5 +- src/progress.js | 4 +- src/progress.session.js | 3 +- src/progress.util.js | 3 +- 21 files changed, 1093 insertions(+), 949 deletions(-) diff --git a/LICENSE b/LICENSE index 78a4d02..d1f44e2 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ - Copyright © 2013-2018 Progress Software Corporation and/or one + Copyright © 2013-2019 Progress Software Corporation and/or one of its subsidiaries or affiliates. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/contributing.md b/contributing.md index 9b3fe1f..b06ff82 100644 --- a/contributing.md +++ b/contributing.md @@ -1,72 +1,85 @@ -Contribute to the JSDO -=== +# Contribute to the JSDO -*Help us improve the JSDO* +_Help us improve the JSDO_ -* [Report an Issue](#report-an-issue "Learn how to report an issue") -* [Request a Feature](#request-a-feature "Learn how to submit a feature or improvement request") -* [Contribute to the Code Base](#contribute-to-the-code-base "Learn how to submit your own improvements to the code") +- [Report an Issue](#report-an-issue "Learn how to report an issue") +- [Request a Feature](#request-a-feature "Learn how to submit a feature or improvement request") +- [Contribute to the Code Base](#contribute-to-the-code-base "Learn how to submit your own improvements to the code") + +# Report an Issue -Report an Issue -=== If you find a bug in the source code or a mistake in the documentation, you can submit an issue to our GitHub Repository. Before you submit your issue, search the archive to check if a similar issues has been logged or addressed. This will let us focus on fixing issues and adding new features. If your issue appears to be a bug, and hasn't been reported, open a new issue. To help us investigate your issue and respond in a timely manner, you can provide is with the following details. -* **Overview of the issue:** Provide a short description of the visible symptoms. If applicable, include error messages, screen shots, and stack traces. -* **Motivation for or use case:** Let us know how this particular issue affects your work. -* **JSDO version:** List the current version of the JSDO. You can find it by opening any of the src or lib files. -* **System configuration:** Provide us with relevant system configuration information such as operating system, network connection, proxy usage, etc. Let us know if you have been able to reproduce the issue on multiple setups. -* **Steps to reproduce:** If applicable, submit a step-by-step walkthrough of how to reproduce the issue. -* **Related issues:** If you discover a similar issue in our archive, give us a heads up - it might help us identify the culprit. -* **Suggest a fix:** You are welcome to suggest a bug fix or pinpoint the line of code or the commit that you believe has introduced the issue. +- **Overview of the issue:** Provide a short description of the visible symptoms. If applicable, include error messages, screen shots, and stack traces. +- **Motivation for or use case:** Let us know how this particular issue affects your work. +- **JSDO version:** List the current version of the JSDO. You can find it by opening version.txt in the product root. +- **System configuration:** Provide us with relevant system configuration information such as operating system, network connection, proxy usage, etc. Let us know if you have been able to reproduce the issue on multiple setups. +- **Steps to reproduce:** If applicable, submit a step-by-step walkthrough of how to reproduce the issue. +- **Related issues:** If you discover a similar issue in our archive, give us a heads up - it might help us identify the culprit. +- **Suggest a fix:** You are welcome to suggest a bug fix or pinpoint the line of code or the commit that you believe has introduced the issue. [Back to Top][1] -Request a Feature -=== -You can request a new feature by submitting an issue with the *enhancement* label to our GitHub Repository. +# Request a Feature + +You can request a new feature by submitting an issue with the _enhancement_ label to our GitHub Repository. If you want to implement a new feature yourself, consider submitting it to the GitHub Repository as a Pull Request. [Back to Top][1] -Contribute to the Code Base -=== +# Contribute to the Code Base + This project only accepts contributions via Pull Requests and only the project moderators can check in to the main repository branch. Before you submit a Pull Request, consider the following guidelines: -* By submitting a pull request, you represent that you have the right to license your contribution to Progress and the community, and agree by submitting the patch that your contributions are licensed under the progress/JSDO license. -Notwithstanding the above, we reserve the right to ask you to sign a Contributor License Agreement (CLA) for larger changes. -* Search GitHub for an open or closed Pull Request that relates to your submission. -* Clone the repository. + +- By submitting a pull request, you represent that you have the right to license your contribution to Progress and the community, and agree by submitting the patch that your contributions are licensed under the progress/JSDO license. + Notwithstanding the above, we reserve the right to ask you to sign a Contributor License Agreement (CLA) for larger changes. +- Search GitHub for an open or closed Pull Request that relates to your submission. +- Clone the repository. + ```bash git clone git@github.com:progress/JSDO.git -b develop ``` -* Initialize the submodule. + +- Initialize the submodule. + ```bash git submodule init ``` -* Fetch data from the submodule. + +- Fetch data from the submodule. + ```bash git submodule update ``` -* Make your changes in a new `git` branch. We use the Gitflow branching model. -* Commit your changes and create a descriptive commit message (the commit message is used to generate release notes). +- Make your changes in a new `git` branch. We use the Gitflow branching model. + +- Commit your changes and create a descriptive commit message (the commit message is used to generate release notes). + ```bash git commit -a ``` -* Ensure your changes pass the Mocha tests for the JSDO. + +- Ensure your changes pass the Mocha tests for the JSDO. + ```bash npm install npm test ``` -* Push your branch to GitHub. + +- Push your branch to GitHub. + ```bash git push origin my-fix-branch ``` -* In GitHub, send a Pull Request to JSDO:develop. -* If we suggest changes, you can modify your branch, rebase, and force a new push to your GitHub repository to update the Pull Request. + +- In GitHub, send a Pull Request to JSDO:develop. +- If we suggest changes, you can modify your branch, rebase, and force a new push to your GitHub repository to update the Pull Request. + ```bash git rebase develop -i git push -f @@ -76,19 +89,26 @@ That's it! Thank you for your contribution! When the patch is reviewed and merged, you can safely delete your branch and pull the changes from the main (upstream) repository. -* Delete the remote branch on GitHub. +- Delete the remote branch on GitHub. + ```bash git push origin --delete my-fix-branch ``` -* Check out the develop branch. + +- Check out the develop branch. + ```bash git checkout develop -f ``` -* Delete the local branch. + +- Delete the local branch. + ```bash git branch -D my-fix-branch ``` -* Update your develop branch with the latest upstream version. + +- Update your develop branch with the latest upstream version. + ``` git pull --ff upstream develop ``` diff --git a/notice.txt b/notice.txt index 9e625b8..263eecc 100644 --- a/notice.txt +++ b/notice.txt @@ -4,6 +4,6 @@ == in this case for the Progress JSDO protocol == ========================================================================= Progress JSDO protocol -Copyright (C) [2013 - 2018] Progress Software Corporation +Copyright (C) [2013 - 2019] Progress Software Corporation For license information see the LICENSE file which accompanies this NOTICE.txt file. Any open source software that may be delivered by Progress Software Corporation embedded in or in association with Progress JSDO protocol is provided pursuant to the open source license applicable to the software and subject to the disclaimers and limitations on liability set forth in such license. diff --git a/packages/angular/notice.txt b/packages/angular/notice.txt index 1d9e2a5..f020f84 100644 --- a/packages/angular/notice.txt +++ b/packages/angular/notice.txt @@ -3,9 +3,8 @@ == the Apache License, Version 2.0, == == in this case for the Progress Data Source for Angular v6.0 == ========================================================================= -Progress Data Source for Angular v6.0 -Copyright 2018 Progress Software Corporation or one of its subsidiaries or affiliates. All Rights Reserved. +Copyright � 2019 Progress Software Corporation or one of its subsidiaries or affiliates. All Rights Reserved. For license information see the LICENSE file which accompanies this NOTICE.txt file. diff --git a/packages/core/notice.txt b/packages/core/notice.txt index 1d27ffc..f4bef47 100644 --- a/packages/core/notice.txt +++ b/packages/core/notice.txt @@ -1,11 +1,10 @@ ========================================================================= == NOTICE file corresponding to section 4 d of == == the Apache License, Version 2.0, == -== in this case for the Progress JSDO Core Module v6.0 == +== in this case for the Progress JSDO Core Module == ========================================================================= -Progress JSDO Core Module v6.0 -Copyright © 2012-2018 Progress Software Corporation or one of its subsidiaries or affiliates. All Rights Reserved. +Copyright © 2012-2019 Progress Software Corporation or one of its subsidiaries or affiliates. All Rights Reserved. For license information see the LICENSE file which accompanies this NOTICE.txt file. diff --git a/packages/core/readme.md b/packages/core/readme.md index 901ba19..c9aadab 100644 --- a/packages/core/readme.md +++ b/packages/core/readme.md @@ -1,18 +1,23 @@ # JSDO Core Module + The JSDO Core Module is an implementation of the JSDO used to provide support to the Progress Data Source component. ### Documentation + Progress® Data Objects, which include the JSDO on the client, represent the Progress-released implementation of Cloud Data Objects. For more information on the latest release, see the Progress Data Objects Guide and Reference. ### JSDO and OpenEdge compatibility + | JSDO version | OpenEdge version | -|----|----| -| 6.0.x, 5.0.0 | 11.6.4, 11.7.x | +| ------------ | ---------------- | +| 6.0.x | 11.7.x, 12.0.x | ### Download + You can download a copy of the full JSDO to a zip file or the individual files below. ### License + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 diff --git a/packages/nativescript/notice.txt b/packages/nativescript/notice.txt index 18c6d10..e5498e5 100644 --- a/packages/nativescript/notice.txt +++ b/packages/nativescript/notice.txt @@ -1,16 +1,14 @@ ========================================================================= == NOTICE file corresponding to section 4 d of == == the Apache License, Version 2.0, == -== in this case for Progress Data Source for NativeScript v6.0 == +== in this case for Progress Data Source for NativeScript == ========================================================================= -Progress Data Source for NativeScript v6.0 (the Product) - -Copyright 2018 Progress Software Corporation or one of its subsidiaries or affiliates. All Rights Reserved. +Copyright � 2019 Progress Software Corporation or one of its subsidiaries or affiliates. All Rights Reserved. For license information see the LICENSE.md file which accompanies this NOTICE.txt file. -Portions of the Product include certain non-proprietary open source and commercial third-party components listed below (Third-Party Components). The authors of the Third-Party Components require Progress Software Corporation (Progress) to include the following notices and additional licensing terms as a condition of Progresss use of such Third-Party Components. You acknowledge that the authors of the Third-Party Components have no obligation to provide support to you for the Third-Party Components or the Product. You hereby undertake to comply with all licenses related to the applicable Third-Party Components. +Portions of the Product include certain non-proprietary open source and commercial third-party components listed below (�Third-Party Components�). The authors of the Third-Party Components require Progress Software Corporation (�Progress�) to include the following notices and additional licensing terms as a condition of Progress�s use of such Third-Party Components. You acknowledge that the authors of the Third-Party Components have no obligation to provide support to you for the Third-Party Components or the Product. You hereby undertake to comply with all licenses related to the applicable Third-Party Components. 1. Special Notices Regarding Open Source Third-Party Components incorporated in the Product: diff --git a/packages/ng-datasource/package.json b/packages/ng-datasource/package.json index f4591a5..ec77dee 100644 --- a/packages/ng-datasource/package.json +++ b/packages/ng-datasource/package.json @@ -1,63 +1,63 @@ { - "name": "@progress/jsdo-nsds", - "version": "6.0.1", - "description": "The Progress Data Source is a TypeScript implementation - Progress Data Source class for NativeScript, Angular. This will provide a seamless integration between OpenEdge (Progress Data Object) with NativeScript", - "main": "lib/progress.data.ng.ds.js", - "files": [ - "LICENSE", - "notice.txt", - "readme.md", - "lib/", - "typings/" - ], - "scripts": { - "build": "tsc", - "build:ds": "tsc --p ../ng-datasource && mkdirp build && concat -o build/progress.data.node.js ../ng-datasource/tsFiles/progress.data.ng.ds.js", - "test": "npm run build:ds && mocha --recursive", - "test:smokes": "npm run build:ds && mocha test/smoke*.js", - "test:tc": "npm run build:ds && mocha --recursive --reporter mocha-teamcity-reporter", - "test:tc-smokes": "npm run build:ds && mocha test/smoke*.js --recursive --reporter mocha-teamcity-reporter", - "lint": "tslint --project . --force" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/progress/JSDO.git" - }, - "keywords": [ - "JSDO", - "Progress", - "node", - "NativeScript", - "DataSource", - "Data Source", - "Data Source for NativeScript", - "Data Source for Angular" - ], - "author": "Progress Software", - "typings": "typings/progress.data.ng.ds.d.ts", - "license": "Apache-2.0", - "bugs": { - "url": "https://github.com/progress/JSDO/issues" - }, - "homepage": "https://github.com/progress/JSDO#readme", - "dependencies": { - "@progress/jsdo-core": "^6.0.0", - "base-64": "^0.1.0", - "xmlhttprequest": "^1.8.0" - }, - "peerDependencies": { - "@angular/core": "^6.1.0", - "rxjs": "^6.0.0" - }, - "optionalDependencies": {}, - "devDependencies": { - "chai": "^4.1.2", - "chai-as-promised": "^7.1.1", - "concat": "^1.0.3", - "mkdirp": "^0.5.1", - "mocha": "^5.2.0", - "mocha-teamcity-reporter": "^2.4.0", - "tslint": "^5.11.0", - "typescript": "^3.1.3" - } -} + "name": "@progress/jsdo-nsds", + "version": "6.0.1", + "description": "The Progress Data Source is a TypeScript implementation - Progress Data Source class for NativeScript, Angular. This will provide a seamless integration between OpenEdge (Progress Data Object) with NativeScript", + "main": "lib/progress.data.ng.ds.js", + "files": [ + "LICENSE", + "notice.txt", + "readme.md", + "lib/", + "typings/" + ], + "scripts": { + "build": "tsc", + "build:ds": "tsc --p ../ng-datasource && mkdirp build && concat -o build/progress.data.node.js ../ng-datasource/tsFiles/progress.data.ng.ds.js", + "test": "npm run build:ds && mocha --recursive", + "test:smokes": "npm run build:ds && mocha test/smoke*.js", + "test:tc": "npm run build:ds && mocha --recursive --reporter mocha-teamcity-reporter", + "test:tc-smokes": "npm run build:ds && mocha test/smoke*.js --recursive --reporter mocha-teamcity-reporter", + "lint": "tslint --project . --force" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/progress/JSDO.git" + }, + "keywords": [ + "JSDO", + "Progress", + "node", + "NativeScript", + "DataSource", + "Data Source", + "Data Source for NativeScript", + "Data Source for Angular" + ], + "author": "Progress Software", + "typings": "typings/progress.data.ng.ds.d.ts", + "license": "Apache-2.0", + "bugs": { + "url": "https://github.com/progress/JSDO/issues" + }, + "homepage": "https://github.com/progress/JSDO#readme", + "dependencies": { + "@progress/jsdo-core": "^6.0.1", + "base-64": "^0.1.0", + "xmlhttprequest": "^1.8.0" + }, + "peerDependencies": { + "@angular/core": "^6.1.0", + "rxjs": "^6.0.0" + }, + "optionalDependencies": {}, + "devDependencies": { + "chai": "^4.1.2", + "chai-as-promised": "^7.1.1", + "concat": "^1.0.3", + "mkdirp": "^0.5.1", + "mocha": "^5.2.0", + "mocha-teamcity-reporter": "^2.4.0", + "tslint": "^5.11.0", + "typescript": "^3.1.3" + } +} \ No newline at end of file diff --git a/packages/ng-datasource/src/progress.data.ng.ds.ts b/packages/ng-datasource/src/progress.data.ng.ds.ts index ecda8e8..b3212ef 100644 --- a/packages/ng-datasource/src/progress.data.ng.ds.ts +++ b/packages/ng-datasource/src/progress.data.ng.ds.ts @@ -1,7 +1,5 @@ /* -Progress Progress Data Source for Angular: 6.0.1 - -Copyright 2017-2018 Progress Software Corporation and/or its subsidiaries or affiliates. +Copyright 2017-2019 Progress Software Corporation and/or its subsidiaries or affiliates. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -30,797 +28,929 @@ import { Observable, from } from "rxjs"; import { catchError } from "rxjs/operators"; export class DataSourceOptions { - jsdo: progress.data.JSDO; - tableRef?: string; - filter?: any; - sort?: any; - top?: number; - skip?: number; - mergeMode?: number; - readLocal?: boolean; - countFnName?: string; + jsdo: progress.data.JSDO; + tableRef?: string; + filter?: any; + sort?: any; + top?: number; + skip?: number; + mergeMode?: number; + readLocal?: boolean; + countFnName?: string; } export interface DataResult { - data: Array; - total: number; + data: Array; + total: number; } // tslint:disable max-classes-per-file @Injectable() export class DataSource { - jsdo: progress.data.JSDO = undefined; - readLocal: boolean; - _skipRec: number; - _isLastResultSetEmpty: boolean; - private _options: DataSourceOptions; - private _tableRef: string; - private _initFromServer: boolean; - - private _convertFields: any; - private _convertTypes: boolean; - - // useArray === false means that arrays would be flattened - private useArrays = false; - - constructor(options: DataSourceOptions) { - this.jsdo = options.jsdo; - this._initFromServer = false; - this._isLastResultSetEmpty = false; - this._options = options; - this.readLocal = options.readLocal !== undefined ? options.readLocal : false; - - // Make sure autoApplyChanges = true - this.jsdo.autoApplyChanges = true; - - if (!options.jsdo || !(options.jsdo instanceof progress.data.JSDO)) { - throw new Error("DataSource: jsdo property must be set to a JSDO instance."); - } - - if (this._options.tableRef === undefined && this.jsdo.defaultTableRef) { - this._options.tableRef = this.jsdo.defaultTableRef._name; - } - if (this._options.tableRef === undefined) { - throw new Error("DataSource: A tableRef must be specified when using a multi-table DataSet."); - } else if (this.jsdo[this._options.tableRef] === undefined) { - throw new Error("DataSource: tableRef '" - + this._options.tableRef + "' is not present in underlying JSDO definition."); - } - this._tableRef = this._options.tableRef; - - // Find out the name of 'Count' function from Catalog if defined as 'Count' operation - // instead of an INVOKE - if (this._options.countFnName !== undefined) { - if (typeof (this.jsdo[this._options.countFnName]) !== "function") { - throw new Error("Invoke operation '" + - this._options.countFnName + "' for countFnName is not defined."); - } - } else if (this.jsdo["_resource"].generic.count !== undefined) { - for (const fnName in this.jsdo["_resource"].fn) { - if (this.jsdo["_resource"].generic.count === this.jsdo["_resource"].fn[fnName]["function"]) { - this._options.countFnName = fnName; - break; - } - } - } - - this._initConvertTypes(); + jsdo: progress.data.JSDO = undefined; + readLocal: boolean; + _skipRec: number; + _isLastResultSetEmpty: boolean; + private _options: DataSourceOptions; + private _tableRef: string; + private _initFromServer: boolean; + + private _convertFields: any; + private _convertTypes: boolean; + + // useArray === false means that arrays would be flattened + private useArrays = false; + + constructor(options: DataSourceOptions) { + this.jsdo = options.jsdo; + this._initFromServer = false; + this._isLastResultSetEmpty = false; + this._options = options; + this.readLocal = + options.readLocal !== undefined ? options.readLocal : false; + + // Make sure autoApplyChanges = true + this.jsdo.autoApplyChanges = true; + + if (!options.jsdo || !(options.jsdo instanceof progress.data.JSDO)) { + throw new Error( + "DataSource: jsdo property must be set to a JSDO instance." + ); } - // _convertStringToDate: - _convertStringToDate(data, fieldName, targetFieldName?) { - const transport = this; - let - array, - ablType, - orig; - - if (!targetFieldName) { - targetFieldName = fieldName; - } - // Check if string is -- - array = transport._convertFields._datePattern.exec(data[targetFieldName]) || []; - if (array.length > 0) { - data[targetFieldName] = new Date(parseInt(array[1], 10), - parseInt(array[2], 10) - 1, - parseInt(array[3], 10)); - } else { - ablType = transport.jsdo[transport._tableRef]._fields[fieldName.toLowerCase()].ablType; - if (ablType === "DATETIME") { - array = transport._convertFields._dateTimePattern.exec(data[targetFieldName]) || []; - if (array.length > 0) { - // Convert date to local time zone - data[targetFieldName] = new Date(parseInt(array[1], 10), - parseInt(array[2], 10) - 1, - parseInt(array[3], 10), - parseInt(array[4], 10), - parseInt(array[5], 10), - parseInt(array[6], 10), - parseInt(array[7], 10)); - } - } - - // Check to see if it was converted - if (typeof (data[targetFieldName]) === "string") { - orig = data[targetFieldName]; - try { - data[targetFieldName] = new Date(data[targetFieldName]); - } catch (e) { - // Conversion to a date object was not successful - data[targetFieldName] = orig; - console.log( - "DataSource: Internal Error: _convertStringToDate() could not convert to date object: " + orig); - } - } - } + if (this._options.tableRef === undefined && this.jsdo.defaultTableRef) { + this._options.tableRef = this.jsdo.defaultTableRef._name; + } + if (this._options.tableRef === undefined) { + throw new Error( + "DataSource: A tableRef must be specified when using a multi-table DataSet." + ); + } else if (this.jsdo[this._options.tableRef] === undefined) { + throw new Error( + "DataSource: tableRef '" + + this._options.tableRef + + "' is not present in underlying JSDO definition." + ); + } + this._tableRef = this._options.tableRef; + + // Find out the name of 'Count' function from Catalog if defined as 'Count' operation + // instead of an INVOKE + if (this._options.countFnName !== undefined) { + if (typeof this.jsdo[this._options.countFnName] !== "function") { + throw new Error( + "Invoke operation '" + + this._options.countFnName + + "' for countFnName is not defined." + ); + } + } else if (this.jsdo["_resource"].generic.count !== undefined) { + for (const fnName in this.jsdo["_resource"].fn) { + if ( + this.jsdo["_resource"].generic.count === + this.jsdo["_resource"].fn[fnName]["function"] + ) { + this._options.countFnName = fnName; + break; + } + } } - // _convertDataTypes: - // Converts data types in the specified data record. - // Data record could come from the JSDO or from the Kendo UI DataSource. - // Returns a reference to the record. - // Returns a copy when useArrays is undefined or false. - _convertDataTypes(data) { - const transport = this; - let - i, - k, - fieldName, - schemaInfo, - prefixElement, - elementName, - copy; - - // Use transport_jsdo as any to avoid exposing internal JSDO methods - const transport_jsdo: any = transport.jsdo; - - if (!transport.useArrays && transport._convertTypes && (transport._convertFields._arrayFields.length > 0)) { - copy = {}; - transport_jsdo._copyRecord(transport_jsdo._buffers[transport._tableRef], data, copy); - data = copy; - } - - if (!transport._convertTypes) { - return data; - } - - for (k = 0; k < transport._convertFields._arrayFields.length; k += 1) { - fieldName = transport._convertFields._arrayFields[k]; - if (data[fieldName]) { - schemaInfo = transport.jsdo[transport._tableRef]._fields[fieldName.toLowerCase()]; - prefixElement = transport_jsdo._getArrayField(fieldName); - for (i = 0; i < schemaInfo.maxItems; i += 1) { - // ABL arrays are 1-based - elementName = prefixElement.name + (i + 1); - - if (!transport.jsdo[transport._tableRef]._fields[elementName.toLowerCase()]) { - // Skip element if a field with the same name exists - // Extract value from array field into individual field - // Array is removed later - data[elementName] = data[fieldName][i]; - - // Convert string DATE fields to JS DATE - if ((schemaInfo.ablType) - && (schemaInfo.ablType.indexOf("DATE") === 0) && (typeof (data[elementName]) === "string")) { - transport._convertStringToDate(data, fieldName, elementName); - } - } - } - if (!transport.useArrays) { - delete data[fieldName]; - } - } - } - - for (k = 0; k < transport._convertFields._dateFields.length; k += 1) { - fieldName = transport._convertFields._dateFields[k]; - if (typeof (data[fieldName]) === "string") { - transport._convertStringToDate(data, fieldName); - } - } + this._initConvertTypes(); + } - return data; - } - - // _initConvertTypes: - // Initializes transport._convertTypes to indicate whether a conversion of the data is needed - // when it is passed to Kendo UI. - // This operation is currently only needed for date fields that are stored as strings. - // Sets array _dateFields to the fields of date fields to convert. - _initConvertTypes() { - const transport = this; - let i, - schema, - fieldName, - convertDateFields = false; - const - dateFields = [], - arrayFields = []; - - transport._convertTypes = false; - - schema = transport.jsdo[transport._tableRef].getSchema(); - for (i = 0; i < schema.length; i += 1) { - fieldName = schema[i].name; - if (fieldName.length > 0 && fieldName.charAt(0) !== "_") { - if (schema[i].type === "string" && - schema[i].format && - (schema[i].format.indexOf("date") !== -1)) { - dateFields.push(fieldName); - if (!convertDateFields) { - convertDateFields = true; - } - } else if (!transport.useArrays && schema[i].type === "array") { - arrayFields.push(fieldName); - if (!convertDateFields && schema[i].ablType && - schema[i].ablType.indexOf("DATE") === 0) { - convertDateFields = true; - } - } - } - } + // _convertStringToDate: + _convertStringToDate(data, fieldName, targetFieldName?) { + const transport = this; + let array, ablType, orig; - if (dateFields.length > 0 || arrayFields.length > 0) { - transport._convertTypes = true; - // _convertFields: Object containing arrays for each data type to convert - transport._convertFields = {}; - transport._convertFields._arrayFields = []; - transport._convertFields._dateFields = []; - } - if (dateFields.length > 0) { - transport._convertFields._dateFields = dateFields; - } - if (convertDateFields) { - transport._convertFields._datePattern = new RegExp("^([0-9]+)?-([0-9]{2})?-([0-9]{2})?$"); - transport._convertFields._dateTimePattern = new RegExp( - "^([0-9]+)?-([0-9]{2})?-([0-9]{2})?" + - "T([0-9]{2})?:([0-9]{2})?:([0-9]{2})?.([0-9]{3})?$" - ); - } - if (arrayFields.length > 0) { - transport._convertFields._arrayFields = arrayFields; - } + if (!targetFieldName) { + targetFieldName = fieldName; + } + // Check if string is -- + array = + transport._convertFields._datePattern.exec(data[targetFieldName]) || []; + if (array.length > 0) { + data[targetFieldName] = new Date( + parseInt(array[1], 10), + parseInt(array[2], 10) - 1, + parseInt(array[3], 10) + ); + } else { + ablType = + transport.jsdo[transport._tableRef]._fields[fieldName.toLowerCase()] + .ablType; + if (ablType === "DATETIME") { + array = + transport._convertFields._dateTimePattern.exec( + data[targetFieldName] + ) || []; + if (array.length > 0) { + // Convert date to local time zone + data[targetFieldName] = new Date( + parseInt(array[1], 10), + parseInt(array[2], 10) - 1, + parseInt(array[3], 10), + parseInt(array[4], 10), + parseInt(array[5], 10), + parseInt(array[6], 10), + parseInt(array[7], 10) + ); + } + } + + // Check to see if it was converted + if (typeof data[targetFieldName] === "string") { + orig = data[targetFieldName]; + try { + data[targetFieldName] = new Date(data[targetFieldName]); + } catch (e) { + // Conversion to a date object was not successful + data[targetFieldName] = orig; + console.log( + "DataSource: Internal Error: _convertStringToDate() could not convert to date object: " + + orig + ); + } + } + } + } + + // _convertDataTypes: + // Converts data types in the specified data record. + // Data record could come from the JSDO or from the Kendo UI DataSource. + // Returns a reference to the record. + // Returns a copy when useArrays is undefined or false. + _convertDataTypes(data) { + const transport = this; + let i, k, fieldName, schemaInfo, prefixElement, elementName, copy; + + // Use transport_jsdo as any to avoid exposing internal JSDO methods + const transport_jsdo: any = transport.jsdo; + + if ( + !transport.useArrays && + transport._convertTypes && + transport._convertFields._arrayFields.length > 0 + ) { + copy = {}; + transport_jsdo._copyRecord( + transport_jsdo._buffers[transport._tableRef], + data, + copy + ); + data = copy; } - /** - * Calls the jsdo.fill() retrieving data from the backend service - * @returns An Observable which includes an Array followed - * by an attribute for specifying 'total' records - */ - read(params?: progress.data.FilterOptions): Observable { - let wrapperPromise; - let obs: Observable; - let filter: any = {}; - const jsdo = this.jsdo; - const tableRef = this._tableRef; - - // If this is a DataSource for a child table, check if read() was performed on parent - if (!this._initFromServer) { - if (jsdo[tableRef]._parent) { - this._initFromServer = (jsdo[jsdo[tableRef]._parent]._data && - (jsdo[jsdo[tableRef]._parent]._data.length > 0)) - || (jsdo[tableRef]._data instanceof Array && (jsdo[tableRef]._data.length > 0)); - } else { - this._initFromServer = (jsdo[tableRef]._data instanceof Array) && (jsdo[tableRef]._data.length > 0); - } - } - - if (this.readLocal && this._initFromServer) { - return Observable.create((observer) => { - const data = this.getJsdoData(); - observer.next({ data: data, total: data.length }); - }); - } + if (!transport._convertTypes) { + return data; + } - if (params && Object.keys(params).length > 0) { - filter = params; - } else { - // If params has no properties, use default values for filter criteria - if (this._options.filter || this._options.sort || this._options.top || this._options.skip) { - filter.filter = this._options.filter; - filter.sort = this._options.sort; - filter.top = this._options.top; - filter.skip = this._options.skip; - } else { - filter = undefined; + for (k = 0; k < transport._convertFields._arrayFields.length; k += 1) { + fieldName = transport._convertFields._arrayFields[k]; + if (data[fieldName]) { + schemaInfo = + transport.jsdo[transport._tableRef]._fields[fieldName.toLowerCase()]; + prefixElement = transport_jsdo._getArrayField(fieldName); + for (i = 0; i < schemaInfo.maxItems; i += 1) { + // ABL arrays are 1-based + elementName = prefixElement.name + (i + 1); + + if ( + !transport.jsdo[transport._tableRef]._fields[ + elementName.toLowerCase() + ] + ) { + // Skip element if a field with the same name exists + // Extract value from array field into individual field + // Array is removed later + data[elementName] = data[fieldName][i]; + + // Convert string DATE fields to JS DATE + if ( + schemaInfo.ablType && + schemaInfo.ablType.indexOf("DATE") === 0 && + typeof data[elementName] === "string" + ) { + transport._convertStringToDate(data, fieldName, elementName); } + } } - - // tableRef required for multi-table DataSets - if (filter) { - filter.tableRef = this._tableRef; + if (!transport.useArrays) { + delete data[fieldName]; } - - wrapperPromise = new Promise( - (resolve, reject) => { - jsdo.fill(filter) - .then((result) => { - - // Verifying the latest resultset value and setting _isLastResultSetEmpty flag if empty - - if (result.request.response[this.jsdo["_dataSetName"]][this._tableRef] - && result.request.response[this.jsdo["_dataSetName"]][this._tableRef].length === 0) { - this._isLastResultSetEmpty = true; - } else if (result.request.response[this.jsdo["_dataSetName"]] - && result.request.response[this.jsdo["_dataSetName"]][this._tableRef] === undefined) { - this._isLastResultSetEmpty = true; - } else if (result.request.response[this.jsdo["_dataSetName"]][this._tableRef] - && result.request.response[this.jsdo["_dataSetName"]][this._tableRef].length !== 0) { - this._isLastResultSetEmpty = false; - } - - this._initFromServer = true; - - const data = this.getJsdoData(); - - // Only call count() function if paging is being used - // Paging is only used if the skip and top is being used during the fill. - if (typeof params !== "undefined" && - (typeof this._options.countFnName !== "undefined" && typeof params.skip !== "undefined" && typeof params.top !== "undefined") - && !(params.skip === 0 && params.top > data.length)) { // Server-side operations - this.getRecCount( - this._options.countFnName, - { filter: result.request.objParam ? result.request.objParam.filter : undefined }) - .then((res) => { - if (res === undefined && res == null) { - reject(this.normalizedErrorObj(res, - "Unexpected response from 'Count Function' Operation", "")); - } else { - resolve({ data, total: res }); - } - }, (error) => { - reject(this.normalizedErrorObj(error, - "Problems invoking getRecCount function", "")); - }).catch((e) => { - reject(this.normalizedErrorObj(e, - "Unknown error occurred calling count.", "")); - }); - } else { - // Client side operations - resolve({ data, total: data.length }); - } - - }).catch((result) => { - reject(this.normalizedErrorObj(result, "read", "")); - }); - } - ); - - obs = from(wrapperPromise); - obs.pipe(catchError((e) => { - return []; - })); - - return obs; + } } - /** - * Returns array of record objects from local memory - * @returns Array - */ - getData(): Array { - return this.getJsdoData(); + for (k = 0; k < transport._convertFields._dateFields.length; k += 1) { + fieldName = transport._convertFields._dateFields[k]; + if (typeof data[fieldName] === "string") { + transport._convertStringToDate(data, fieldName); + } } - /** - * Calls the jsdo.add() method, creating a new record in JSDO memory - * jsdo.add() will either return the new record, or throws an exception - * @param data - Record to create is passed as an object - * @returns - If successful, an object of the new record is returned - */ - create(data: object): object { - let jsRecord; - const newRow = {}; - const saveUseRelationships = this.jsdo.useRelationships; - - try { - this.jsdo.useRelationships = false; - jsRecord = this.jsdo[this._tableRef].add(data); - this._copyRecord(jsRecord.data, newRow); - } catch (error) { - if (this.jsdo.autoApplyChanges) { - this.jsdo[this._tableRef].rejectChanges(); - } - throw error; - } finally { - this.jsdo.useRelationships = saveUseRelationships; - } - - return newRow; + return data; + } + + // _initConvertTypes: + // Initializes transport._convertTypes to indicate whether a conversion of the data is needed + // when it is passed to Kendo UI. + // This operation is currently only needed for date fields that are stored as strings. + // Sets array _dateFields to the fields of date fields to convert. + _initConvertTypes() { + const transport = this; + let i, + schema, + fieldName, + convertDateFields = false; + const dateFields = [], + arrayFields = []; + + transport._convertTypes = false; + + schema = transport.jsdo[transport._tableRef].getSchema(); + for (i = 0; i < schema.length; i += 1) { + fieldName = schema[i].name; + if (fieldName.length > 0 && fieldName.charAt(0) !== "_") { + if ( + schema[i].type === "string" && + schema[i].format && + schema[i].format.indexOf("date") !== -1 + ) { + dateFields.push(fieldName); + if (!convertDateFields) { + convertDateFields = true; + } + } else if (!transport.useArrays && schema[i].type === "array") { + arrayFields.push(fieldName); + if ( + !convertDateFields && + schema[i].ablType && + schema[i].ablType.indexOf("DATE") === 0 + ) { + convertDateFields = true; + } + } + } } - /** - * Returns a copy of the record with the specified id. - * Note: current implementation uses jsdo's internal _id as id. - * @param id - id of record - * @returns - copy of record with specified id, else null if no record found - */ - findById(id: string): object { - let jsRecord; - const row = {}; - - // For now, we are using _id as our id to find records.. - jsRecord = this.jsdo[this._options.tableRef].findById(id, false); - if (jsRecord) { - this._copyRecord(jsRecord.data, row); + if (dateFields.length > 0 || arrayFields.length > 0) { + transport._convertTypes = true; + // _convertFields: Object containing arrays for each data type to convert + transport._convertFields = {}; + transport._convertFields._arrayFields = []; + transport._convertFields._dateFields = []; + } + if (dateFields.length > 0) { + transport._convertFields._dateFields = dateFields; + } + if (convertDateFields) { + transport._convertFields._datePattern = new RegExp( + "^([0-9]+)?-([0-9]{2})?-([0-9]{2})?$" + ); + transport._convertFields._dateTimePattern = new RegExp( + "^([0-9]+)?-([0-9]{2})?-([0-9]{2})?" + + "T([0-9]{2})?:([0-9]{2})?:([0-9]{2})?.([0-9]{3})?$" + ); + } + if (arrayFields.length > 0) { + transport._convertFields._arrayFields = arrayFields; + } + } + + /** + * Calls the jsdo.fill() retrieving data from the backend service + * @returns An Observable which includes an Array followed + * by an attribute for specifying 'total' records + */ + read(params?: progress.data.FilterOptions): Observable { + let wrapperPromise; + let obs: Observable; + let filter: any = {}; + const jsdo = this.jsdo; + const tableRef = this._tableRef; + + // If this is a DataSource for a child table, check if read() was performed on parent + if (!this._initFromServer) { + if (jsdo[tableRef]._parent) { + this._initFromServer = + (jsdo[jsdo[tableRef]._parent]._data && + jsdo[jsdo[tableRef]._parent]._data.length > 0) || + (jsdo[tableRef]._data instanceof Array && + jsdo[tableRef]._data.length > 0); + } else { + this._initFromServer = + jsdo[tableRef]._data instanceof Array && + jsdo[tableRef]._data.length > 0; + } + } - return row; - } else { + if (this.readLocal && this._initFromServer) { + return Observable.create(observer => { + const data = this.getJsdoData(); + observer.next({ data: data, total: data.length }); + }); + } - return null; - } + if (params && Object.keys(params).length > 0) { + filter = params; + } else { + // If params has no properties, use default values for filter criteria + if ( + this._options.filter || + this._options.sort || + this._options.top || + this._options.skip + ) { + filter.filter = this._options.filter; + filter.sort = this._options.sort; + filter.top = this._options.top; + filter.skip = this._options.skip; + } else { + filter = undefined; + } } - /** - * Calls the jsdo.update() method, for updating a record in JSDO memory - * jsdo.update() will either return the updated record, or throws an exception - * @param data - Record to create is passed as an object - * @returns - boolean. True if successful, false if there is any failure - */ - update(data: any): boolean { - const saveUseRelationships = this.jsdo.useRelationships; + // tableRef required for multi-table DataSets + if (filter) { + filter.tableRef = this._tableRef; + } - if (!data && (data === undefined || null)) { - throw new Error("Unexpected signature for update() operation."); - } + wrapperPromise = new Promise((resolve, reject) => { + jsdo + .fill(filter) + .then(result => { + // Verifying the latest resultset value and setting _isLastResultSetEmpty flag if empty + + if ( + result.request.response[this.jsdo["_dataSetName"]][ + this._tableRef + ] && + result.request.response[this.jsdo["_dataSetName"]][this._tableRef] + .length === 0 + ) { + this._isLastResultSetEmpty = true; + } else if ( + result.request.response[this.jsdo["_dataSetName"]] && + result.request.response[this.jsdo["_dataSetName"]][ + this._tableRef + ] === undefined + ) { + this._isLastResultSetEmpty = true; + } else if ( + result.request.response[this.jsdo["_dataSetName"]][ + this._tableRef + ] && + result.request.response[this.jsdo["_dataSetName"]][this._tableRef] + .length !== 0 + ) { + this._isLastResultSetEmpty = false; + } + + this._initFromServer = true; + + const data = this.getJsdoData(); + + // Only call count() function if paging is being used + // Paging is only used if the skip and top is being used during the fill. + if ( + typeof params !== "undefined" && + (typeof this._options.countFnName !== "undefined" && + typeof params.skip !== "undefined" && + typeof params.top !== "undefined") && + !(params.skip === 0 && params.top > data.length) + ) { + // Server-side operations + this.getRecCount(this._options.countFnName, { + filter: result.request.objParam + ? result.request.objParam.filter + : undefined + }) + .then( + res => { + if (res === undefined && res == null) { + reject( + this.normalizedErrorObj( + res, + "Unexpected response from 'Count Function' Operation", + "" + ) + ); + } else { + resolve({ data, total: res }); + } + }, + error => { + reject( + this.normalizedErrorObj( + error, + "Problems invoking getRecCount function", + "" + ) + ); + } + ) + .catch(e => { + reject( + this.normalizedErrorObj( + e, + "Unknown error occurred calling count.", + "" + ) + ); + }); + } else { + // Client side operations + resolve({ data, total: data.length }); + } + }) + .catch(result => { + reject(this.normalizedErrorObj(result, "read", "")); + }); + }); + + obs = from(wrapperPromise); + obs.pipe( + catchError(e => { + return []; + }) + ); + + return obs; + } + + /** + * Returns array of record objects from local memory + * @returns Array + */ + getData(): Array { + return this.getJsdoData(); + } + + /** + * Calls the jsdo.add() method, creating a new record in JSDO memory + * jsdo.add() will either return the new record, or throws an exception + * @param data - Record to create is passed as an object + * @returns - If successful, an object of the new record is returned + */ + create(data: object): object { + let jsRecord; + const newRow = {}; + const saveUseRelationships = this.jsdo.useRelationships; + + try { + this.jsdo.useRelationships = false; + jsRecord = this.jsdo[this._tableRef].add(data); + this._copyRecord(jsRecord.data, newRow); + } catch (error) { + if (this.jsdo.autoApplyChanges) { + this.jsdo[this._tableRef].rejectChanges(); + } + throw error; + } finally { + this.jsdo.useRelationships = saveUseRelationships; + } - const id: string = (data && data._id) ? data._id : null; - let jsRecord; - let retVal = false; + return newRow; + } + + /** + * Returns a copy of the record with the specified id. + * Note: current implementation uses jsdo's internal _id as id. + * @param id - id of record + * @returns - copy of record with specified id, else null if no record found + */ + findById(id: string): object { + let jsRecord; + const row = {}; + + // For now, we are using _id as our id to find records.. + jsRecord = this.jsdo[this._options.tableRef].findById(id, false); + if (jsRecord) { + this._copyRecord(jsRecord.data, row); + + return row; + } else { + return null; + } + } + + /** + * Calls the jsdo.update() method, for updating a record in JSDO memory + * jsdo.update() will either return the updated record, or throws an exception + * @param data - Record to create is passed as an object + * @returns - boolean. True if successful, false if there is any failure + */ + update(data: any): boolean { + const saveUseRelationships = this.jsdo.useRelationships; + + if (!data && (data === undefined || null)) { + throw new Error("Unexpected signature for update() operation."); + } - if (!id) { - throw new Error("DataSource.update(): data missing _id property"); - } + const id: string = data && data._id ? data._id : null; + let jsRecord; + let retVal = false; - try { - this.jsdo.useRelationships = false; - jsRecord = this.jsdo[this._tableRef].findById(id); - if (jsRecord) { - // Found a valid record. Lets update now - retVal = jsRecord.assign(data); - this.jsdo.useRelationships = saveUseRelationships; - } else { - throw new Error("DataSource.update(): Unable to find record with this id " + id); - } - } catch (error) { - if (this.jsdo.autoApplyChanges) { - this.jsdo[this._tableRef].rejectChanges(); - } - throw error; - } finally { - this.jsdo.useRelationships = saveUseRelationships; - } + if (!id) { + throw new Error("DataSource.update(): data missing _id property"); + } - return retVal; + try { + this.jsdo.useRelationships = false; + jsRecord = this.jsdo[this._tableRef].findById(id); + if (jsRecord) { + // Found a valid record. Lets update now + retVal = jsRecord.assign(data); + this.jsdo.useRelationships = saveUseRelationships; + } else { + throw new Error( + "DataSource.update(): Unable to find record with this id " + id + ); + } + } catch (error) { + if (this.jsdo.autoApplyChanges) { + this.jsdo[this._tableRef].rejectChanges(); + } + throw error; + } finally { + this.jsdo.useRelationships = saveUseRelationships; } - /** - * Deletes a record from JSDO memory by calling jsdo.remove() API. This accepts a record - * with a valid _id without which an error is reported - * @param data Provide valid record for deletion - * @returns boolean - True if the operation succeeds, false otherwise - */ - remove(data: any): boolean { - let retVal = false; - const id: string = (data && data._id) ? data._id : null; - const saveUseRelationships = this.jsdo.useRelationships; - let jsRecord; + return retVal; + } + + /** + * Deletes a record from JSDO memory by calling jsdo.remove() API. This accepts a record + * with a valid _id without which an error is reported + * @param data Provide valid record for deletion + * @returns boolean - True if the operation succeeds, false otherwise + */ + remove(data: any): boolean { + let retVal = false; + const id: string = data && data._id ? data._id : null; + const saveUseRelationships = this.jsdo.useRelationships; + let jsRecord; + + if (!data && (data === undefined || null)) { + throw new Error("Unexpected signature for remove() operation."); + } - if (!data && (data === undefined || null)) { - throw new Error("Unexpected signature for remove() operation."); - } + if (!id) { + throw new Error("DataSource.remove(): data missing _id property"); + } - if (!id) { - throw new Error("DataSource.remove(): data missing _id property"); - } + try { + this.jsdo.useRelationships = false; + jsRecord = this.jsdo[this._tableRef].findById(id); + if (jsRecord) { + // Found a valid record. Lets delete the record + retVal = jsRecord.remove(data); + } else { + throw new Error( + "DataSource.remove(): Unable to find record with this id " + id + ); + } + } catch (error) { + if (this.jsdo.autoApplyChanges) { + this.jsdo[this._tableRef].rejectChanges(); + } + throw error; + } finally { + this.jsdo.useRelationships = saveUseRelationships; + } - try { - this.jsdo.useRelationships = false; - jsRecord = this.jsdo[this._tableRef].findById(id); - if (jsRecord) { - // Found a valid record. Lets delete the record - retVal = jsRecord.remove(data); + return retVal; + } + + /** + * Returns true if the underlying jsdo has CUD support (create, update, delete operations). + * If not, it returns false. + */ + hasCUDSupport(): boolean { + return this.jsdo.hasCUDOperations; + } + + /** + * Returns true if the underlying jsdo has Submit support (submit operation). + * If not, it returns false. + */ + hasSubmitSupport(): boolean { + return this.jsdo.hasSubmitOperation; + } + + /** + * Synchronizes to the server all record changes (creates, updates, and deletes) pending in + * JSDO memory for the current Data Object resource + * If jsdo.hasSubmitOperation is false, all record modifications are sent to server individually. + * When 'true', modifications are batched together and sent in single request + * @returns {object} Observable + */ + saveChanges(): Observable> { + let promise; + let obs: Observable>; + const promResponse: object = {}; + let tableRefVal: any; + + promise = new Promise((resolve, reject) => { + const responseData: object = {}; + + this.jsdo + .saveChanges(this.jsdo.hasSubmitOperation) + .then(result => { + tableRefVal = this._tableRef; + if (this.jsdo.hasSubmitOperation) { + // Submit case + this._copyRecord(result.request.response, responseData); + resolve(responseData); + } else { + // Non-Submit case + if ( + result.request && + result.request.batch.operations && + result.request.batch.operations.length > 0 + ) { + result.request.batch.operations.forEach(operation => { + this._copyRecord(operation.response, responseData); + // In case of multiple operations we want to merge those records pertaining + // to different operations in a single dataset and is sent as part of the + // response object for the consumer of this API. + this._buildResponse(responseData, promResponse); + }); + resolve(promResponse); + // Scenario where the saveChanges is invoked directly without any Submit/Non-Submit + // service as the serviceURI. We will resolve with an empty object + } else if ( + result.request && + result.request.batch.operations.length === 0 + ) { + resolve({}); } else { - throw new Error("DataSource.remove(): Unable to find record with this id " + id); - } - } catch (error) { - if (this.jsdo.autoApplyChanges) { - this.jsdo[this._tableRef].rejectChanges(); - } - throw error; - } finally { - this.jsdo.useRelationships = saveUseRelationships; - } - - return retVal; - } - - /** - * Returns true if the underlying jsdo has CUD support (create, update, delete operations). - * If not, it returns false. - */ - hasCUDSupport(): boolean { - return this.jsdo.hasCUDOperations; - } - - /** - * Returns true if the underlying jsdo has Submit support (submit operation). - * If not, it returns false. - */ - hasSubmitSupport(): boolean { - return this.jsdo.hasSubmitOperation; - } - - /** - * Synchronizes to the server all record changes (creates, updates, and deletes) pending in - * JSDO memory for the current Data Object resource - * If jsdo.hasSubmitOperation is false, all record modifications are sent to server individually. - * When 'true', modifications are batched together and sent in single request - * @returns {object} Observable - */ - saveChanges(): Observable> { - let promise; - let obs: Observable>; - const promResponse: object = {}; - let tableRefVal: any; - - promise = new Promise( - (resolve, reject) => { - const responseData: object = {}; - - this.jsdo.saveChanges(this.jsdo.hasSubmitOperation) - .then((result) => { - tableRefVal = this._tableRef; - if (this.jsdo.hasSubmitOperation) { - // Submit case - this._copyRecord(result.request.response, responseData); - resolve(responseData); - } else { - // Non-Submit case - if (result.request && result.request.batch.operations && result.request.batch.operations.length > 0) { - result.request.batch.operations.forEach((operation) => { - this._copyRecord(operation.response, responseData); - // In case of multiple operations we want to merge those records pertaining - // to different operations in a single dataset and is sent as part of the - // response object for the consumer of this API. - this._buildResponse(responseData, promResponse); - }); - resolve(promResponse); - // Scenario where the saveChanges is invoked directly without any Submit/Non-Submit - // service as the serviceURI. We will resolve with an empty object - } else if (result.request && result.request.batch.operations.length === 0) { - resolve({}); - } else { // Reject promise if either of above cases are not met - reject(this - .normalizedErrorObj(result, "saveChanges", "Errors occurred while saving Changes.")); - } - } - }).catch((result) => { - if (this.jsdo.autoApplyChanges) { - this.jsdo[this._tableRef].rejectChanges(); - } - reject(this - .normalizedErrorObj(result, "saveChanges", "Errors occurred while saving Changes.")); - }); + // Reject promise if either of above cases are not met + reject( + this.normalizedErrorObj( + result, + "saveChanges", + "Errors occurred while saving Changes." + ) + ); } - ); - - obs = from(promise); - obs.pipe(catchError((e) => { - return []; - })); - - return obs; - } - - /** - * First, retrieves data from JSDO local memory - * Then makes a copy of it, to ensure jsdo memory is only manipulated thru DataSource API - * Returns array of record objects - * @returns Array - */ - private getJsdoData(): Array { - const jsdo = this.jsdo; - const saveUseRelationships = jsdo.useRelationships; - let data; - let copy; - let array; - - jsdo.useRelationships = false; - data = jsdo[this._tableRef].getData(); - jsdo.useRelationships = saveUseRelationships; - - // Make copy of jsdo data for datasource - if (this._convertTypes) { - array = []; - data.forEach(item => { - if (!this.useArrays && this._convertFields._arrayFields.length > 0) { - // Use a reference - // _convertDataTypes() will create the copy for this case - copy = item; - } else { - copy = Object.assign({}, item); - } - - copy = this._convertDataTypes(copy); - array.push(copy); - }); - data = array; + } + }) + .catch(result => { + if (this.jsdo.autoApplyChanges) { + this.jsdo[this._tableRef].rejectChanges(); + } + reject( + this.normalizedErrorObj( + result, + "saveChanges", + "Errors occurred while saving Changes." + ) + ); + }); + }); + + obs = from(promise); + obs.pipe( + catchError(e => { + return []; + }) + ); + + return obs; + } + + /** + * First, retrieves data from JSDO local memory + * Then makes a copy of it, to ensure jsdo memory is only manipulated thru DataSource API + * Returns array of record objects + * @returns Array + */ + private getJsdoData(): Array { + const jsdo = this.jsdo; + const saveUseRelationships = jsdo.useRelationships; + let data; + let copy; + let array; + + jsdo.useRelationships = false; + data = jsdo[this._tableRef].getData(); + jsdo.useRelationships = saveUseRelationships; + + // Make copy of jsdo data for datasource + if (this._convertTypes) { + array = []; + data.forEach(item => { + if (!this.useArrays && this._convertFields._arrayFields.length > 0) { + // Use a reference + // _convertDataTypes() will create the copy for this case + copy = item; } else { - data = (data.length > 0 ? data.map((item) => Object.assign({}, item)) : []); + copy = Object.assign({}, item); } - return data; - } - - /** - * This method is used for fetching the 'count' of records from backend - * This method is used as part of read() operation when serverOperations is set by client - * @param {string} name Name of the method pertaining to 'Count' functionality - * @param {any} object Filter object - */ - private getRecCount(name: string, object: any): Promise { - let countVal: any; - let getRecCountPromise; - - getRecCountPromise = new Promise( - (resolve, reject) => { - this.jsdo.invoke(name, object) - .then((result) => { - - try { - if (typeof (result.request.response) === "object" - && Object.keys(result.request.response).length === 1) { - countVal = Object.values(result.request.response)[0]; - if (typeof (countVal) !== "number") { - countVal = undefined; - } - } - resolve(countVal); - } catch (e) { - reject(this.normalizedErrorObj(e, "getRecCount", "")); - } - }).catch((result) => { - reject(this.normalizedErrorObj(result, "Error invoking the 'Count' operation", "")); - }); - }); - - return getRecCountPromise; - } - - /** - * This method is called after an error has occurred on a jsdo operation, and is - * used to get an error message. - * @param {any} result Object containing error info returned after execution of jsdo operation - * @param {string} operation String containing operation performed when error occurred - * @param {string} genericMsg If multiple errors are found in result object, if specified, - * this string will be returned. If not specified, first error string will be returned. - * @returns A single error message - */ - private normalizeError(result: any, operation: string, genericMsg: string) { - let errorMsg = ""; - let lastErrors = null; - - try { - if (result.info && result.info.errorObject) { - errorMsg = result.info.errorObject.message; - } else if (result.jsdo) { - lastErrors = result.jsdo[this._tableRef].getErrors(); - if (lastErrors.length >= 1) { - // If generic message is provided, use that, else we'll just grab first message - if (lastErrors.length > 1 && genericMsg) { - errorMsg = genericMsg; - } else { - errorMsg = lastErrors[0].error; - } - } - } else if (result.message) { - errorMsg = result.message; - } + copy = this._convertDataTypes(copy); + array.push(copy); + }); + data = array; + } else { + data = data.length > 0 ? data.map(item => Object.assign({}, item)) : []; + } - if (errorMsg === "") { - errorMsg = "Unknown error occurred when calling " + operation + "."; + return data; + } + + /** + * This method is used for fetching the 'count' of records from backend + * This method is used as part of read() operation when serverOperations is set by client + * @param {string} name Name of the method pertaining to 'Count' functionality + * @param {any} object Filter object + */ + private getRecCount(name: string, object: any): Promise { + let countVal: any; + let getRecCountPromise; + + getRecCountPromise = new Promise((resolve, reject) => { + this.jsdo + .invoke(name, object) + .then(result => { + try { + if ( + typeof result.request.response === "object" && + Object.keys(result.request.response).length === 1 + ) { + countVal = Object.values(result.request.response)[0]; + if (typeof countVal !== "number") { + countVal = undefined; + } } - } catch (error) { - errorMsg = error.message; - } - - return errorMsg; + resolve(countVal); + } catch (e) { + reject(this.normalizedErrorObj(e, "getRecCount", "")); + } + }) + .catch(result => { + reject( + this.normalizedErrorObj( + result, + "Error invoking the 'Count' operation", + "" + ) + ); + }); + }); + + return getRecCountPromise; + } + + /** + * This method is called after an error has occurred on a jsdo operation, and is + * used to get an error message. + * @param {any} result Object containing error info returned after execution of jsdo operation + * @param {string} operation String containing operation performed when error occurred + * @param {string} genericMsg If multiple errors are found in result object, if specified, + * this string will be returned. If not specified, first error string will be returned. + * @returns A single error message + */ + private normalizeError(result: any, operation: string, genericMsg: string) { + let errorMsg = ""; + let lastErrors = null; + + try { + if (result.info && result.info.errorObject) { + errorMsg = result.info.errorObject.message; + } else if (result.jsdo) { + lastErrors = result.jsdo[this._tableRef].getErrors(); + if (lastErrors.length >= 1) { + // If generic message is provided, use that, else we'll just grab first message + if (lastErrors.length > 1 && genericMsg) { + errorMsg = genericMsg; + } else { + errorMsg = lastErrors[0].error; + } + } + } else if (result.message) { + errorMsg = result.message; + } + + if (errorMsg === "") { + errorMsg = "Unknown error occurred when calling " + operation + "."; + } + } catch (error) { + errorMsg = error.message; } - /** - * This method is called after an error has occurred on a jsdo operation, and is - * used to get an error object. - * @param {any} result Object containing error info returned after execution of jsdo operation - * @param {string} operation String containing operation performed when error occurred - * @param {string} genericMsg If multiple errors are found in result object, if specified, - * this string will be returned as part of the new error object. If not specified, first error - * string will be returned. - * @returns A single error object with all information - */ - private normalizedErrorObj(result: any, operation: string, genericMsg: string) { - let errorObj: {[key: string]: any} = {}; - let eMsg = ""; - let object: {[key: string]: any} = {}; - - if (result && result.jsdo && result.success == false) { - object = result.request; - } - - eMsg = this.normalizeError(result, operation, genericMsg); + return errorMsg; + } + + /** + * This method is called after an error has occurred on a jsdo operation, and is + * used to get an error object. + * @param {any} result Object containing error info returned after execution of jsdo operation + * @param {string} operation String containing operation performed when error occurred + * @param {string} genericMsg If multiple errors are found in result object, if specified, + * this string will be returned as part of the new error object. If not specified, first error + * string will be returned. + * @returns A single error object with all information + */ + private normalizedErrorObj( + result: any, + operation: string, + genericMsg: string + ) { + let errorObj: { [key: string]: any } = {}; + let eMsg = ""; + let object: { [key: string]: any } = {}; + + if (result && result.jsdo && result.success == false) { + object = result.request; + } - errorObj = new Error(eMsg); - errorObj.info = object; + eMsg = this.normalizeError(result, operation, genericMsg); - return errorObj; - } + errorObj = new Error(eMsg); + errorObj.info = object; - private _copyRecord(source, target) { - let field; - let newObject; + return errorObj; + } - if (!target) { - console.log("_copyRecord: target parameter is not defined"); + private _copyRecord(source, target) { + let field; + let newObject; - return; - } + if (!target) { + console.log("_copyRecord: target parameter is not defined"); - for (field in source) { - if (source.hasOwnProperty(field)) { - // Ignore all internal fields, except _id - if (source[field] === undefined || source[field] === null || - (field.charAt(0) === "_" && field !== "_id") || - field.startsWith("prods:")) { - continue; - } + return; + } - if (source[field] instanceof Date) { - target[field] = source[field]; - } else if (typeof source[field] === "object") { - newObject = source[field] instanceof Array ? [] : {}; - this._copyRecord(source[field], newObject); - target[field] = newObject; - } else { - target[field] = source[field]; - } - } + for (field in source) { + if (source.hasOwnProperty(field)) { + // Ignore all internal fields, except _id + if ( + source[field] === undefined || + source[field] === null || + (field.charAt(0) === "_" && field !== "_id") || + field.startsWith("prods:") + ) { + continue; + } + + if (source[field] instanceof Date) { + target[field] = source[field]; + } else if (typeof source[field] === "object") { + newObject = source[field] instanceof Array ? [] : {}; + this._copyRecord(source[field], newObject); + target[field] = newObject; + } else { + target[field] = source[field]; } + } } - - /** - * This method is responsible for building a valid responseObject when multiple records - * are involved in transaction - * @param source Actual dataset/record to be merged - * @param target Resultant dataset with all records information - */ - private _buildResponse(source, target) { - const newEntry = source; - let firstKey = Object.keys(source)[0]; - const secondKey = (firstKey) ? Object.keys(source[firstKey])[0] : undefined; + } + + /** + * This method is responsible for building a valid responseObject when multiple records + * are involved in transaction + * @param source Actual dataset/record to be merged + * @param target Resultant dataset with all records information + */ + private _buildResponse(source, target) { + const newEntry = source; + let firstKey = Object.keys(source)[0]; + const secondKey = firstKey ? Object.keys(source[firstKey])[0] : undefined; + + // Delete's on no submit services return empty datasets so + // don't add anything. + if ( + typeof source[firstKey] !== "undefined" && + typeof source[firstKey][secondKey] !== "undefined" + ) { + if (Object.keys(target).length === 0) { + this._copyRecord(source, target); + } else { + firstKey = Object.keys(target)[0]; // Delete's on no submit services return empty datasets so // don't add anything. - if (typeof source[firstKey] !== "undefined" - && typeof source[firstKey][secondKey] !== "undefined") { + if ( + firstKey && + typeof target[firstKey][this._tableRef] !== "undefined" + ) { + // Dataset usecase + if (firstKey !== this._tableRef) { + target[firstKey][this._tableRef].push( + newEntry[firstKey][this._tableRef][0] + ); + } else { + // Temp-table usecase + target[this._tableRef].push(newEntry[this._tableRef][0]); + } - if (Object.keys(target).length === 0) { - this._copyRecord(source, target); - } else { - firstKey = Object.keys(target)[0]; - - // Delete's on no submit services return empty datasets so - // don't add anything. - if (firstKey && typeof target[firstKey][this._tableRef] !== "undefined") { - // Dataset usecase - if (firstKey !== this._tableRef) { - target[firstKey][this._tableRef].push(newEntry[firstKey][this._tableRef][0]); - } else { // Temp-table usecase - target[this._tableRef].push(newEntry[this._tableRef][0]); - } - - return target; - } - } + return target; } + } } -} \ No newline at end of file + } +} diff --git a/packages/node/notice.txt b/packages/node/notice.txt index 410f6d9..7742b4e 100644 --- a/packages/node/notice.txt +++ b/packages/node/notice.txt @@ -1,22 +1,21 @@ ========================================================================= == NOTICE file corresponding to section 4 d of == -== the Apache License, Version 2.0, == -== in this case for Progress Data Source for Node.js v6.0 == +== the Apache License, Version 2.0, == +== in this case for Progress Data Source for Node.js == ========================================================================= -Progress Data Source for Node.js v6.0 (the Product) -Copyright 2018 Progress Software Corporation or one of its subsidiaries or affiliates. All Rights Reserved. +Copyright � 2019 Progress Software Corporation or one of its subsidiaries or affiliates. All Rights Reserved. For license information see the LICENSE.md file which accompanies this NOTICE.txt file. -Portions of the Product include certain non-proprietary open source and commercial third-party components listed below (Third-Party Components). The authors of the Third-Party Components require Progress Software Corporation (Progress) to include the following notices and additional licensing terms as a condition of Progresss use of such Third-Party Components. You acknowledge that the authors of the Third-Party Components have no obligation to provide support to you for the Third-Party Components or the Product. You hereby undertake to comply with all licenses related to the applicable Third-Party Components. +Portions of the Product include certain non-proprietary open source and commercial third-party components listed below (�Third-Party Components�). The authors of the Third-Party Components require Progress Software Corporation (�Progress�) to include the following notices and additional licensing terms as a condition of Progress�s use of such Third-Party Components. You acknowledge that the authors of the Third-Party Components have no obligation to provide support to you for the Third-Party Components or the Product. You hereby undertake to comply with all licenses related to the applicable Third-Party Components. 1. Special Notices Regarding Open Source Third-Party Components incorporated in the Product: (1) The Apache Software License, Version 2.0: -Progress Data Source for Node.js v6.0 incorporates RxJS v6.0. Such technology is subject to the following terms and conditions: +Progress Data Source for Node.js incorporates RxJS v6.0. Such technology is subject to the following terms and conditions: The Apache Software License, Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ------------------------------------------------------------------------- diff --git a/packages/node/package.json b/packages/node/package.json index 6ff669f..b8d4d33 100644 --- a/packages/node/package.json +++ b/packages/node/package.json @@ -1,57 +1,57 @@ { - "name": "@progress/jsdo-node", - "version": "6.0.1", - "description": "The Progress Data Source is a TypeScript implementation - Progress Data Source class for NativeScript, Angular and Node.js. This will provide a seamless integration between OpenEdge (Progress Data Object) with Node.js.", - "main": "lib/progress.data.node.js", - "files": [ - "LICENSE", - "notice.txt", - "readme.md", - "lib/", - "typings/" - ], - "scripts": { - "build:ds": "tsc --p ../ng-datasource && mkdirp build && concat -o build/progress.data.node.js ../ng-datasource/tsFiles/progress.data.ng.ds.js", - "test": "npm run build:ds && mocha --recursive", - "test:smokes": "npm run build:ds && mocha test/smoke*.js", - "test:tc": "npm run build:ds && mocha --recursive --reporter mocha-teamcity-reporter", - "test:tc-smokes": "npm run build:ds && mocha test/smoke*.js --recursive --reporter mocha-teamcity-reporter" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/progress/JSDO.git" - }, - "keywords": [ - "JSDO", - "Progress", - "node", - "DataSource", - "Data Source", - "Data Source for Node" - ], - "author": "Progress Software", - "typings": "typings/progress.data.node.d.ts", - "license": "Apache-2.0", - "bugs": { - "url": "https://github.com/progress/JSDO/issues" - }, - "homepage": "https://github.com/progress/JSDO#readme", - "dependencies": { - "@progress/jsdo-core": "^6.0.0", - "base-64": "^0.1.0", - "xmlhttprequest": "^1.8.0", - "@angular/core": "^6.1.0", - "rxjs": "^6.0.0" - }, - "optionalDependencies": {}, - "devDependencies": { - "chai": "^4.1.2", - "chai-as-promised": "^7.1.1", - "concat": "^1.0.3", - "mkdirp": "^0.5.1", - "mocha": "^5.2.0", - "mocha-teamcity-reporter": "^2.4.0", - "tslint": "^5.11.0", - "typescript": "^3.1.3" - } -} + "name": "@progress/jsdo-node", + "version": "6.0.1", + "description": "The Progress Data Source is a TypeScript implementation - Progress Data Source class for NativeScript, Angular and Node.js. This will provide a seamless integration between OpenEdge (Progress Data Object) with Node.js.", + "main": "lib/progress.data.node.js", + "files": [ + "LICENSE", + "notice.txt", + "readme.md", + "lib/", + "typings/" + ], + "scripts": { + "build:ds": "tsc --p ../ng-datasource && mkdirp build && concat -o build/progress.data.node.js ../ng-datasource/tsFiles/progress.data.ng.ds.js", + "test": "npm run build:ds && mocha --recursive", + "test:smokes": "npm run build:ds && mocha test/smoke*.js", + "test:tc": "npm run build:ds && mocha --recursive --reporter mocha-teamcity-reporter", + "test:tc-smokes": "npm run build:ds && mocha test/smoke*.js --recursive --reporter mocha-teamcity-reporter" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/progress/JSDO.git" + }, + "keywords": [ + "JSDO", + "Progress", + "node", + "DataSource", + "Data Source", + "Data Source for Node" + ], + "author": "Progress Software", + "typings": "typings/progress.data.node.d.ts", + "license": "Apache-2.0", + "bugs": { + "url": "https://github.com/progress/JSDO/issues" + }, + "homepage": "https://github.com/progress/JSDO#readme", + "dependencies": { + "@progress/jsdo-core": "^6.0.1", + "base-64": "^0.1.0", + "xmlhttprequest": "^1.8.0", + "@angular/core": "^6.1.0", + "rxjs": "^6.0.0" + }, + "optionalDependencies": {}, + "devDependencies": { + "chai": "^4.1.2", + "chai-as-promised": "^7.1.1", + "concat": "^1.0.3", + "mkdirp": "^0.5.1", + "mocha": "^5.2.0", + "mocha-teamcity-reporter": "^2.4.0", + "tslint": "^5.11.0", + "typescript": "^3.1.3" + } +} \ No newline at end of file diff --git a/readme.md b/readme.md index d294c81..ca8a0f1 100644 --- a/readme.md +++ b/readme.md @@ -1,41 +1,44 @@ # JSDO -The JSDO is a JavaScript implementation of the CDO Specification published by Progress Software Corporation. -The JSDO is a free and open-source full-featured implementation that can be used in web, mobile web and hybrid mobile apps. + +The JSDO is a JavaScript implementation of the CDO Specification published by Progress Software Corporation. +The JSDO is a free and open-source full-featured implementation that can be used in web, mobile web and hybrid mobile apps. ### Documentation + Progress® Data Objects, which include the JSDO on the client, represent the Progress-released implementation of Cloud Data Objects. For more information on the latest release, see the Progress Data Objects Guide and Reference. ### JSDO and OpenEdge compatibility + | JSDO version | OpenEdge version | -|----|----| -| 6.0.0 | 11.6.3, 11.6.4, 11.7.x | +| ------------ | ---------------- | +| 6.0.1 | 11.7.x, 12.0.x | ### Download -You can download a copy of the full JSDO to a zip file or the individual files below. - - -| Source File| Purpose | -| ---------- | ------- | -| [progress.js](https://github.com/progress/JSDO/blob/master/src/progress.js) | JSDO core | -| [progress.session.js](https://github.com/progress/JSDO/blob/master/src/progress.session.js) | JSDO session management | -| [progress.util.js](https://github.com/progress/JSDO/blob/master/src/progress.util.js) | Helper classes for the JSDO | -| [progress.data.kendo.js](https://github.com/progress/JSDO/blob/master/src/progress.data.kendo.js) | Kendo UI DataSource for the JSDO | -| [auth/progress.auth.js](https://github.com/progress/JSDO/blob/master/src/auth/progress.auth.js) | JSDO authentication provider | -| [auth/progress.auth.basic.js](https://github.com/progress/JSDO/blob/master/src/auth/progress.auth.basic.js) | JSDO authentication provider (BASIC auth) | -| [auth/progress.auth.form.js](https://github.com/progress/JSDO/blob/master/src/auth/progress.auth.form.js) | JSDO authentication provider (FORM-based auth) | -| [auth/progress.auth.sso.js](https://github.com/progress/JSDO/blob/master/src/auth/progress.auth.sso.js) | JSDO authentication provider (SSO auth) | +You can download a copy of the full JSDO to a zip file or the individual files below. -| Lib File| Purpose | -| ------- | ------- | -| [progress.all.js](https://github.com/progress/JSDO/blob/master/lib/progress.all.js) | The JSDO plus the Kendo UI DataSource for JSDO | -| [progress.all.min.js](https://github.com/progress/JSDO/blob/master/lib/progress.all.min.js) | The JSDO plus the Kendo UI DataSource for JSDO minified for deployment | -| [progress.jsdo.js](https://github.com/progress/JSDO/blob/master/lib/progress.jsdo.js) | The JSDO core components (JSDO, Session, Util classes) | +| Source File | Purpose | +| ----------------------------------------------------------------------------------------------------------- | ---------------------------------------------- | +| [progress.js](https://github.com/progress/JSDO/blob/master/src/progress.js) | JSDO core | +| [progress.session.js](https://github.com/progress/JSDO/blob/master/src/progress.session.js) | JSDO session management | +| [progress.util.js](https://github.com/progress/JSDO/blob/master/src/progress.util.js) | Helper classes for the JSDO | +| [progress.data.kendo.js](https://github.com/progress/JSDO/blob/master/src/progress.data.kendo.js) | Kendo UI DataSource for the JSDO | +| [auth/progress.auth.js](https://github.com/progress/JSDO/blob/master/src/auth/progress.auth.js) | JSDO authentication provider | +| [auth/progress.auth.basic.js](https://github.com/progress/JSDO/blob/master/src/auth/progress.auth.basic.js) | JSDO authentication provider (BASIC auth) | +| [auth/progress.auth.form.js](https://github.com/progress/JSDO/blob/master/src/auth/progress.auth.form.js) | JSDO authentication provider (FORM-based auth) | +| [auth/progress.auth.sso.js](https://github.com/progress/JSDO/blob/master/src/auth/progress.auth.sso.js) | JSDO authentication provider (SSO auth) | + +| Lib File | Purpose | +| --------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ | +| [progress.all.js](https://github.com/progress/JSDO/blob/master/lib/progress.all.js) | The JSDO plus the Kendo UI DataSource for JSDO | +| [progress.all.min.js](https://github.com/progress/JSDO/blob/master/lib/progress.all.min.js) | The JSDO plus the Kendo UI DataSource for JSDO minified for deployment | +| [progress.jsdo.js](https://github.com/progress/JSDO/blob/master/lib/progress.jsdo.js) | The JSDO core components (JSDO, Session, Util classes) | | [progress.jsdo.min.js](https://github.com/progress/JSDO/blob/master/lib/progress.jsdo.min.js) | The JSDO core components (JSDO, Session, Util classes) minified for deployment | The JSDO can be used by hybrid mobile apps, mobile web apps and web browser apps to access OpenEdge and Rollbase servers. Other implementations include a client in a mobile Hybrid App (a variation of the browser client), a Telerik® NativeScript client, a Node.js server, and a Java server. The JSDO has successfully been used with servers other than OpenEdge such as Node.js to export data created / aggregated in Modulus™ to a Progress® Rollbase Application. ### License + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 diff --git a/src/auth/progress.auth.basic.js b/src/auth/progress.auth.basic.js index 6982eaa..bc80786 100644 --- a/src/auth/progress.auth.basic.js +++ b/src/auth/progress.auth.basic.js @@ -1,7 +1,6 @@ /* -progress.auth.basic.js Version: 6.0.1 -Copyright (c) 2016-2017 Progress Software Corporation and/or its subsidiaries or affiliates. +Copyright (c) 2016-2019 Progress Software Corporation and/or its subsidiaries or affiliates. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/src/auth/progress.auth.bearer.js b/src/auth/progress.auth.bearer.js index 9586acb..96fc8a4 100644 --- a/src/auth/progress.auth.bearer.js +++ b/src/auth/progress.auth.bearer.js @@ -1,7 +1,7 @@ /* -progress.auth.Bearer.js Version: 4.4.0-3 -Copyright (c) 2017-2018 Progress Software Corporation and/or its subsidiaries or affiliates. + +Copyright (c) 2017-2019 Progress Software Corporation and/or its subsidiaries or affiliates. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/src/auth/progress.auth.form.js b/src/auth/progress.auth.form.js index 54afd1f..18e0cb7 100644 --- a/src/auth/progress.auth.form.js +++ b/src/auth/progress.auth.form.js @@ -1,7 +1,6 @@ /* -progress.auth.form.js Version: 6.0.1 -Copyright (c) 2016-2018 Progress Software Corporation and/or its subsidiaries or affiliates. +Copyright (c) 2016-2019 Progress Software Corporation and/or its subsidiaries or affiliates. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/src/auth/progress.auth.js b/src/auth/progress.auth.js index 27b0c3e..cefccda 100644 --- a/src/auth/progress.auth.js +++ b/src/auth/progress.auth.js @@ -1,7 +1,6 @@ /* -progress.auth.js Version: 6.0.1 -Copyright (c) 2016-2017 Progress Software Corporation and/or its subsidiaries or affiliates. +Copyright (c) 2016-2019 Progress Software Corporation and/or its subsidiaries or affiliates. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/src/auth/progress.auth.sso.js b/src/auth/progress.auth.sso.js index 6ec5074..ceec59a 100644 --- a/src/auth/progress.auth.sso.js +++ b/src/auth/progress.auth.sso.js @@ -1,7 +1,6 @@ /* -progress.auth.sso.js Version: 6.0.1 -Copyright (c) 2016-2017 Progress Software Corporation and/or its subsidiaries or affiliates. +Copyright (c) 2016-2019 Progress Software Corporation and/or its subsidiaries or affiliates. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/src/progress.data.kendo.js b/src/progress.data.kendo.js index 0204cbc..aabd8cb 100644 --- a/src/progress.data.kendo.js +++ b/src/progress.data.kendo.js @@ -1,8 +1,7 @@ -/* -progress.data.kendo.js Version: 6.0.1 +/* -Copyright (c) 2015-2018 Progress Software Corporation and/or its subsidiaries or affiliates. +Copyright (c) 2015-2019 Progress Software Corporation and/or its subsidiaries or affiliates. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/src/progress.js b/src/progress.js index d8196ed..70b4dd5 100644 --- a/src/progress.js +++ b/src/progress.js @@ -1,7 +1,5 @@ /* -progress.js Version: 6.0.1 - -Copyright (c) 2012-2018 Progress Software Corporation and/or its subsidiaries or affiliates. +Copyright (c) 2012-2019 Progress Software Corporation and/or its subsidiaries or affiliates. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/src/progress.session.js b/src/progress.session.js index 4a8ccf6..ac4c7fd 100644 --- a/src/progress.session.js +++ b/src/progress.session.js @@ -1,7 +1,6 @@ /* -progress.session.js Version: 6.0.1 -Copyright (c) 2012-2018 Progress Software Corporation and/or its subsidiaries or affiliates. +Copyright (c) 2012-2019 Progress Software Corporation and/or its subsidiaries or affiliates. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/src/progress.util.js b/src/progress.util.js index 6248a1d..00b4abe 100644 --- a/src/progress.util.js +++ b/src/progress.util.js @@ -1,9 +1,8 @@ /*eslint no-global-assign: ["error", {"exceptions": ["localStorage"]}]*/ /*global XMLHttpRequest:true, require, console, localStorage:true, sessionStorage:true, $:true, Promise, setTimeout */ /* -progress.util.js Version: 6.0.1 -Copyright (c) 2014-2018 Progress Software Corporation and/or its subsidiaries or affiliates. +Copyright (c) 2014-2019 Progress Software Corporation and/or its subsidiaries or affiliates. Contains support objects used by the jsdo and/or session object From 4313b4c316a984f50723696a100194b4b2d42f7f Mon Sep 17 00:00:00 2001 From: Damon Benson Date: Mon, 25 Mar 2019 21:06:02 -0400 Subject: [PATCH 27/59] ADAS-15578 Legal updates for notice.txt --- notice.txt | 19 +++++++++++++------ packages/angular/notice.txt | 9 +++++++-- packages/core/notice.txt | 11 +++++------ packages/nativescript/notice.txt | 10 ++++++---- packages/node/notice.txt | 11 +++++------ 5 files changed, 36 insertions(+), 24 deletions(-) diff --git a/notice.txt b/notice.txt index 263eecc..2995088 100644 --- a/notice.txt +++ b/notice.txt @@ -1,9 +1,16 @@ - ========================================================================= - == NOTICE file corresponding to section 4 d of == - == the Apache License, Version 2.0, == - == in this case for the Progress JSDO protocol == - ========================================================================= +========================================================================= +== NOTICE file corresponding to section 4 d of == +== the Apache License, Version 2.0, == +== in this case for the Progress JSDO protocol == +========================================================================= Progress JSDO protocol -Copyright (C) [2013 - 2019] Progress Software Corporation + +Copyright (C) 2013-2019 Progress Software Corporation and/or one of its subsidiaries or affiliates. All rights reserved. + For license information see the LICENSE file which accompanies this NOTICE.txt file. + Any open source software that may be delivered by Progress Software Corporation embedded in or in association with Progress JSDO protocol is provided pursuant to the open source license applicable to the software and subject to the disclaimers and limitations on liability set forth in such license. + +Updated 3/18/2019 + + diff --git a/packages/angular/notice.txt b/packages/angular/notice.txt index f020f84..5b6cbdc 100644 --- a/packages/angular/notice.txt +++ b/packages/angular/notice.txt @@ -1,11 +1,16 @@ ========================================================================= == NOTICE file corresponding to section 4 d of == == the Apache License, Version 2.0, == -== in this case for the Progress Data Source for Angular v6.0 == +== in this case for the Progress Data Source for Angular == ========================================================================= +Progress Data Source for Angular -Copyright � 2019 Progress Software Corporation or one of its subsidiaries or affiliates. All Rights Reserved. +Copyright © 2018-2019 Progress Software Corporation or one of its subsidiaries or affiliates. All Rights Reserved. For license information see the LICENSE file which accompanies this NOTICE.txt file. Any open source software that may be delivered by Progress Software Corporation embedded in or in association with Progress Data Source for Angular v6.0 is provided pursuant to the open source license applicable to the software and subject to the disclaimers and limitations on liability set forth in such license. + +Updated 3/18/2019 + + diff --git a/packages/core/notice.txt b/packages/core/notice.txt index f4bef47..4f7bbf6 100644 --- a/packages/core/notice.txt +++ b/packages/core/notice.txt @@ -1,14 +1,13 @@ ========================================================================= == NOTICE file corresponding to section 4 d of == == the Apache License, Version 2.0, == -== in this case for the Progress JSDO Core Module == +== in this case for the Progress JSDO Core Module == ========================================================================= - -Copyright © 2012-2019 Progress Software Corporation or one of its subsidiaries or affiliates. All Rights Reserved. + +Copyright © 2018-2019 Progress Software Corporation or one of its subsidiaries or affiliates. All Rights Reserved. For license information see the LICENSE file which accompanies this NOTICE.txt file. -Any open source software that may be delivered by Progress Software Corporation embedded in or in association with Progress Data Source Core v6.0 is provided pursuant to the open source license applicable to the software and subject to the disclaimers and limitations on liability set forth in such license. - +Any open source software that may be delivered by Progress Software Corporation embedded in or in association with Progress JSDO Core Module v6.0 is provided pursuant to the open source license applicable to the software and subject to the disclaimers and limitations on liability set forth in such license. - +Updated 3/19/2019 \ No newline at end of file diff --git a/packages/nativescript/notice.txt b/packages/nativescript/notice.txt index e5498e5..8dd196e 100644 --- a/packages/nativescript/notice.txt +++ b/packages/nativescript/notice.txt @@ -1,14 +1,16 @@ ========================================================================= == NOTICE file corresponding to section 4 d of == == the Apache License, Version 2.0, == -== in this case for Progress Data Source for NativeScript == +== in this case for Progress Data Source for NativeScript == ========================================================================= -Copyright � 2019 Progress Software Corporation or one of its subsidiaries or affiliates. All Rights Reserved. +Progress Data Source for NativeScript (the “Product”) + +Copyright © 2018-2019 Progress Software Corporation or one of its subsidiaries or affiliates. All Rights Reserved. For license information see the LICENSE.md file which accompanies this NOTICE.txt file. -Portions of the Product include certain non-proprietary open source and commercial third-party components listed below (�Third-Party Components�). The authors of the Third-Party Components require Progress Software Corporation (�Progress�) to include the following notices and additional licensing terms as a condition of Progress�s use of such Third-Party Components. You acknowledge that the authors of the Third-Party Components have no obligation to provide support to you for the Third-Party Components or the Product. You hereby undertake to comply with all licenses related to the applicable Third-Party Components. +Portions of the Product include certain open source and commercial third-party components listed below (“Third-Party Components”). The authors of the Third-Party Components require Progress Software Corporation (“PSC”) to include the following notices and additional licensing terms as a condition of PSC’s use of such Third-Party Components. You acknowledge that the authors of the Third-Party Components have no obligation to provide support to you for the Third-Party Components or the Product. You hereby undertake to comply with all licenses related to the applicable Third-Party Components. Notwithstanding anything to the contrary, to the extent that any of the terms and conditions of the Product Agreement conflict, vary, or are in addition to the terms and conditions of the aforementioned third-party licenses for these technologies, such terms and conditions are offered by PSC alone and not by any other party. 1. Special Notices Regarding Open Source Third-Party Components incorporated in the Product: @@ -53,4 +55,4 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI NOTICE FROM PROGRESS SOFTWARE CORPORATION: Additional notices may be included in the release notes or other documentation that accompanies updates received in connection with support of the Product. -9/25/2018 +Updated 3/18/2019 diff --git a/packages/node/notice.txt b/packages/node/notice.txt index 7742b4e..e15ddbd 100644 --- a/packages/node/notice.txt +++ b/packages/node/notice.txt @@ -4,23 +4,22 @@ == in this case for Progress Data Source for Node.js == ========================================================================= +Progress Data Source for Node.js (the “Product”) -Copyright � 2019 Progress Software Corporation or one of its subsidiaries or affiliates. All Rights Reserved. +Copyright © 2018-2019 Progress Software Corporation or one of its subsidiaries or affiliates. All Rights Reserved. For license information see the LICENSE.md file which accompanies this NOTICE.txt file. -Portions of the Product include certain non-proprietary open source and commercial third-party components listed below (�Third-Party Components�). The authors of the Third-Party Components require Progress Software Corporation (�Progress�) to include the following notices and additional licensing terms as a condition of Progress�s use of such Third-Party Components. You acknowledge that the authors of the Third-Party Components have no obligation to provide support to you for the Third-Party Components or the Product. You hereby undertake to comply with all licenses related to the applicable Third-Party Components. +Portions of the Product include certain open source and commercial third-party components listed below (“Third-Party Components”). The authors of the Third-Party Components require Progress Software Corporation (“PSC”) to include the following notices and additional licensing terms as a condition of PSC’s use of such Third-Party Components. You acknowledge that the authors of the Third-Party Components have no obligation to provide support to you for the Third-Party Components or the Product. You hereby undertake to comply with all licenses related to the applicable Third-Party Components. Notwithstanding anything to the contrary, to the extent that any of the terms and conditions of the Product Agreement conflict, vary, or are in addition to the terms and conditions of the aforementioned third-party licenses for these technologies, such terms and conditions are offered by PSC alone and not by any other party. 1. Special Notices Regarding Open Source Third-Party Components incorporated in the Product: (1) The Apache Software License, Version 2.0: -Progress Data Source for Node.js incorporates RxJS v6.0. Such technology is subject to the following terms and conditions: +Progress Data Source for Node.js v6.0 incorporates RxJS v6.0. Such technology is subject to the following terms and conditions: The Apache Software License, Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ------------------------------------------------------------------------- - - (2) MIT-Style License: (a) Progress Data Source for Node.js v6.0 incorporates Angular Core v6.1.0. Such technology is subject to the following terms and conditions: @@ -67,4 +66,4 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI NOTICE FROM PROGRESS SOFTWARE CORPORATION: Additional notices may be included in the release notes or other documentation that accompanies updates received in connection with support of the Product. -9/25/2018 +Updated 3/18/2019 From 16c2db0843a8e64900bc939f268584851713325a Mon Sep 17 00:00:00 2001 From: Damon A Benson <38659302+damonabenson@users.noreply.github.com> Date: Mon, 25 Mar 2019 21:09:28 -0400 Subject: [PATCH 28/59] Create version.txt --- version.txt | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 version.txt diff --git a/version.txt b/version.txt new file mode 100644 index 0000000..0d52745 --- /dev/null +++ b/version.txt @@ -0,0 +1,21 @@ +### JSDO FILE VERSIONS +progress.js.................................Version: 6.0.1 +progress.auth.js............................Version: 6.0.1 +progress.auth.Bearer.js.....................Version: 4.4.0-3 +progress.auth.basic.js......................Version: 6.0.1 +progress.auth.form.js.......................Version: 6.0.1 +progress.auth.sso.js........................Version: 6.0.1 +progress.data.kendo.js......................Version: 6.0.1 +progress.session.js.........................Version: 6.0.1 +progress.util.js............................Version: 6.0.1 +Progress Data Source for Angular:...........Version: 6.0.1 +Progress Data Source for NativeScript.......Version: 6.0.1 (the �Product�) +progress.data.ng.ds.ts......................Version: 6.0.1 +Progress JSDO Core Module...................Version: 6.0.1 + +### JSDO and OpenEdge compatibility +|-----------------------------------------| +| JSDO version | OpenEdge version | +|----------------|------------------------| +| 6.0.1 | 11.7.x, 12.0.x | +|-----------------------------------------| From 6d5554e651b22fcfe27287e0206be60481baa6dc Mon Sep 17 00:00:00 2001 From: Damon Benson Date: Mon, 25 Mar 2019 21:13:11 -0400 Subject: [PATCH 29/59] Update notice.txt Update file description --- packages/core/notice.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/core/notice.txt b/packages/core/notice.txt index 4f7bbf6..4c55caa 100644 --- a/packages/core/notice.txt +++ b/packages/core/notice.txt @@ -3,7 +3,8 @@ == the Apache License, Version 2.0, == == in this case for the Progress JSDO Core Module == ========================================================================= - +Progress JSDO Core Module + Copyright © 2018-2019 Progress Software Corporation or one of its subsidiaries or affiliates. All Rights Reserved. For license information see the LICENSE file which accompanies this NOTICE.txt file. From 3af2274466429d7ba30f2844f7ea92a70f054720 Mon Sep 17 00:00:00 2001 From: Damon Benson Date: Mon, 25 Mar 2019 21:18:25 -0400 Subject: [PATCH 30/59] ADAS-15578 Versioning info moved to version.txt --- packages/angular/notice.txt | 2 +- packages/core/notice.txt | 2 +- packages/nativescript/notice.txt | 6 +++--- packages/ng-datasource/src/progress.data.ng.ds.ts | 2 -- packages/node/notice.txt | 10 +++++----- version.txt | 4 +++- 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/packages/angular/notice.txt b/packages/angular/notice.txt index 5b6cbdc..1386bab 100644 --- a/packages/angular/notice.txt +++ b/packages/angular/notice.txt @@ -9,7 +9,7 @@ Copyright © 2018-2019 Progress Software Corporation or one of its subsidiaries For license information see the LICENSE file which accompanies this NOTICE.txt file. -Any open source software that may be delivered by Progress Software Corporation embedded in or in association with Progress Data Source for Angular v6.0 is provided pursuant to the open source license applicable to the software and subject to the disclaimers and limitations on liability set forth in such license. +Any open source software that may be delivered by Progress Software Corporation embedded in or in association with Progress Data Source for Angular is provided pursuant to the open source license applicable to the software and subject to the disclaimers and limitations on liability set forth in such license. Updated 3/18/2019 diff --git a/packages/core/notice.txt b/packages/core/notice.txt index 4c55caa..83b694d 100644 --- a/packages/core/notice.txt +++ b/packages/core/notice.txt @@ -9,6 +9,6 @@ Copyright © 2018-2019 Progress Software Corporation or one of its subsidiaries For license information see the LICENSE file which accompanies this NOTICE.txt file. -Any open source software that may be delivered by Progress Software Corporation embedded in or in association with Progress JSDO Core Module v6.0 is provided pursuant to the open source license applicable to the software and subject to the disclaimers and limitations on liability set forth in such license. +Any open source software that may be delivered by Progress Software Corporation embedded in or in association with Progress JSDO Core Module is provided pursuant to the open source license applicable to the software and subject to the disclaimers and limitations on liability set forth in such license. Updated 3/19/2019 \ No newline at end of file diff --git a/packages/nativescript/notice.txt b/packages/nativescript/notice.txt index 8dd196e..7d1f8a5 100644 --- a/packages/nativescript/notice.txt +++ b/packages/nativescript/notice.txt @@ -16,14 +16,14 @@ Portions of the Product include certain open source and commercial third-party c (1) MIT-Style License: -(a) Progress Data Source for NativeScript v6.0 incorporates zone.js v0.8.26. Such technology is subject to the following terms and conditions: +(a) Progress Data Source for NativeScript incorporates zone.js v0.8.26. Such technology is subject to the following terms and conditions: The MIT License Copyright (c) 2016-2018 Google, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -(b) Progress Data Source for NativeScript v6.0 incorporates base-64 v0.1.0. Such technology is subject to the following terms and conditions: +(b) Progress Data Source for NativeScript incorporates base-64 v0.1.0. Such technology is subject to the following terms and conditions: Copyright Mathias Bynens Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the @@ -42,7 +42,7 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -(c) Progress Data Source for NativeScript v6.0 incorporates nativescript-localstorage v2.0.0. Such technology is subject to the following terms and conditions: +(c) Progress Data Source for NativeScript incorporates nativescript-localstorage v2.0.0. Such technology is subject to the following terms and conditions: The MIT License (MIT) localstorage Copyright (c) 2016, Nathanael Anderson diff --git a/packages/ng-datasource/src/progress.data.ng.ds.ts b/packages/ng-datasource/src/progress.data.ng.ds.ts index b3212ef..01913ef 100644 --- a/packages/ng-datasource/src/progress.data.ng.ds.ts +++ b/packages/ng-datasource/src/progress.data.ng.ds.ts @@ -13,8 +13,6 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -progress.data.ng.ds.ts Version: v6.0.1 - Progress Data Source class for NativeScript, Angular. This will provide a seamless integration between OpenEdge (Progress Data Object) with NativeScript. diff --git a/packages/node/notice.txt b/packages/node/notice.txt index e15ddbd..80c9c88 100644 --- a/packages/node/notice.txt +++ b/packages/node/notice.txt @@ -16,20 +16,20 @@ Portions of the Product include certain open source and commercial third-party c (1) The Apache Software License, Version 2.0: -Progress Data Source for Node.js v6.0 incorporates RxJS v6.0. Such technology is subject to the following terms and conditions: +Progress Data Source for Node.js incorporates RxJS v6.0. Such technology is subject to the following terms and conditions: The Apache Software License, Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ------------------------------------------------------------------------- (2) MIT-Style License: -(a) Progress Data Source for Node.js v6.0 incorporates Angular Core v6.1.0. Such technology is subject to the following terms and conditions: +(a) Progress Data Source for Node.js incorporates Angular Core v6.1.0. Such technology is subject to the following terms and conditions: The MIT License Copyright (c) 2014-2018 Google, Inc. http://angular.io Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -(b) Progress Data Source for Node.js v6.0 incorporates base-64 v0.1.0. Such technology is subject to the following terms and conditions: +(b) Progress Data Source for Node.js incorporates base-64 v0.1.0. Such technology is subject to the following terms and conditions: Copyright Mathias Bynens Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the @@ -48,14 +48,14 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -(c) Progress Data Source for Node.js v6.0 incorporates node-localstorage v1.3.1. Such technology is subject to the following terms and conditions: +(c) Progress Data Source for Node.js incorporates node-localstorage v1.3.1. Such technology is subject to the following terms and conditions: MIT License Copyright (c) 2011, 2012, Lawrence S. Maccherone, Jr. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -(d) Progress Data Source for Node.js v6.0 incorporates xmlhttprequst v1.8.0. Such technology is subject to the following terms and conditions: +(d) Progress Data Source for Node.js incorporates xmlhttprequst v1.8.0. Such technology is subject to the following terms and conditions: Copyright (c) 2010 passive.ly LLC Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. diff --git a/version.txt b/version.txt index 0d52745..4072926 100644 --- a/version.txt +++ b/version.txt @@ -11,7 +11,9 @@ progress.util.js............................Version: 6.0.1 Progress Data Source for Angular:...........Version: 6.0.1 Progress Data Source for NativeScript.......Version: 6.0.1 (the �Product�) progress.data.ng.ds.ts......................Version: 6.0.1 -Progress JSDO Core Module...................Version: 6.0.1 +Progress JSDO Core Module...................Version: 6.0.1 +progress.data.ng.ds.ts......................Version: 6.0.1 + ### JSDO and OpenEdge compatibility |-----------------------------------------| From b741c0a0062751ea32692a6fcef668d9763044e0 Mon Sep 17 00:00:00 2001 From: Damon Benson Date: Tue, 26 Mar 2019 06:53:30 -0400 Subject: [PATCH 31/59] Update version.txt Change progress.auth.Bearer.js to 6.0.1 --- version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.txt b/version.txt index 4072926..1535a09 100644 --- a/version.txt +++ b/version.txt @@ -1,7 +1,7 @@ ### JSDO FILE VERSIONS progress.js.................................Version: 6.0.1 progress.auth.js............................Version: 6.0.1 -progress.auth.Bearer.js.....................Version: 4.4.0-3 +progress.auth.Bearer.js.....................Version: 6.0.1 progress.auth.basic.js......................Version: 6.0.1 progress.auth.form.js.......................Version: 6.0.1 progress.auth.sso.js........................Version: 6.0.1 From 5fccd0b3463528336bc45bb1338c0ee15f654874 Mon Sep 17 00:00:00 2001 From: Nicolette Date: Tue, 26 Mar 2019 11:50:15 -0400 Subject: [PATCH 32/59] undo spacing changes --- .../ng-datasource/src/progress.data.ng.ds.ts | 1594 ++++++++--------- 1 file changed, 733 insertions(+), 861 deletions(-) diff --git a/packages/ng-datasource/src/progress.data.ng.ds.ts b/packages/ng-datasource/src/progress.data.ng.ds.ts index 01913ef..8eb83bd 100644 --- a/packages/ng-datasource/src/progress.data.ng.ds.ts +++ b/packages/ng-datasource/src/progress.data.ng.ds.ts @@ -1,4 +1,6 @@ /* +Progress Progress Data Source for Angular + Copyright 2017-2019 Progress Software Corporation and/or its subsidiaries or affiliates. Licensed under the Apache License, Version 2.0 (the "License"); @@ -13,6 +15,8 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. +progress.data.ng.ds.ts + Progress Data Source class for NativeScript, Angular. This will provide a seamless integration between OpenEdge (Progress Data Object) with NativeScript. @@ -26,929 +30,797 @@ import { Observable, from } from "rxjs"; import { catchError } from "rxjs/operators"; export class DataSourceOptions { - jsdo: progress.data.JSDO; - tableRef?: string; - filter?: any; - sort?: any; - top?: number; - skip?: number; - mergeMode?: number; - readLocal?: boolean; - countFnName?: string; + jsdo: progress.data.JSDO; + tableRef?: string; + filter?: any; + sort?: any; + top?: number; + skip?: number; + mergeMode?: number; + readLocal?: boolean; + countFnName?: string; } export interface DataResult { - data: Array; - total: number; + data: Array; + total: number; } // tslint:disable max-classes-per-file @Injectable() export class DataSource { - jsdo: progress.data.JSDO = undefined; - readLocal: boolean; - _skipRec: number; - _isLastResultSetEmpty: boolean; - private _options: DataSourceOptions; - private _tableRef: string; - private _initFromServer: boolean; - - private _convertFields: any; - private _convertTypes: boolean; - - // useArray === false means that arrays would be flattened - private useArrays = false; - - constructor(options: DataSourceOptions) { - this.jsdo = options.jsdo; - this._initFromServer = false; - this._isLastResultSetEmpty = false; - this._options = options; - this.readLocal = - options.readLocal !== undefined ? options.readLocal : false; - - // Make sure autoApplyChanges = true - this.jsdo.autoApplyChanges = true; - - if (!options.jsdo || !(options.jsdo instanceof progress.data.JSDO)) { - throw new Error( - "DataSource: jsdo property must be set to a JSDO instance." - ); - } + jsdo: progress.data.JSDO = undefined; + readLocal: boolean; + _skipRec: number; + _isLastResultSetEmpty: boolean; + private _options: DataSourceOptions; + private _tableRef: string; + private _initFromServer: boolean; + + private _convertFields: any; + private _convertTypes: boolean; + + // useArray === false means that arrays would be flattened + private useArrays = false; + + constructor(options: DataSourceOptions) { + this.jsdo = options.jsdo; + this._initFromServer = false; + this._isLastResultSetEmpty = false; + this._options = options; + this.readLocal = options.readLocal !== undefined ? options.readLocal : false; + + // Make sure autoApplyChanges = true + this.jsdo.autoApplyChanges = true; + + if (!options.jsdo || !(options.jsdo instanceof progress.data.JSDO)) { + throw new Error("DataSource: jsdo property must be set to a JSDO instance."); + } - if (this._options.tableRef === undefined && this.jsdo.defaultTableRef) { - this._options.tableRef = this.jsdo.defaultTableRef._name; - } - if (this._options.tableRef === undefined) { - throw new Error( - "DataSource: A tableRef must be specified when using a multi-table DataSet." - ); - } else if (this.jsdo[this._options.tableRef] === undefined) { - throw new Error( - "DataSource: tableRef '" + - this._options.tableRef + - "' is not present in underlying JSDO definition." - ); - } - this._tableRef = this._options.tableRef; - - // Find out the name of 'Count' function from Catalog if defined as 'Count' operation - // instead of an INVOKE - if (this._options.countFnName !== undefined) { - if (typeof this.jsdo[this._options.countFnName] !== "function") { - throw new Error( - "Invoke operation '" + - this._options.countFnName + - "' for countFnName is not defined." - ); - } - } else if (this.jsdo["_resource"].generic.count !== undefined) { - for (const fnName in this.jsdo["_resource"].fn) { - if ( - this.jsdo["_resource"].generic.count === - this.jsdo["_resource"].fn[fnName]["function"] - ) { - this._options.countFnName = fnName; - break; - } - } - } + if (this._options.tableRef === undefined && this.jsdo.defaultTableRef) { + this._options.tableRef = this.jsdo.defaultTableRef._name; + } + if (this._options.tableRef === undefined) { + throw new Error("DataSource: A tableRef must be specified when using a multi-table DataSet."); + } else if (this.jsdo[this._options.tableRef] === undefined) { + throw new Error("DataSource: tableRef '" + + this._options.tableRef + "' is not present in underlying JSDO definition."); + } + this._tableRef = this._options.tableRef; + + // Find out the name of 'Count' function from Catalog if defined as 'Count' operation + // instead of an INVOKE + if (this._options.countFnName !== undefined) { + if (typeof (this.jsdo[this._options.countFnName]) !== "function") { + throw new Error("Invoke operation '" + + this._options.countFnName + "' for countFnName is not defined."); + } + } else if (this.jsdo["_resource"].generic.count !== undefined) { + for (const fnName in this.jsdo["_resource"].fn) { + if (this.jsdo["_resource"].generic.count === this.jsdo["_resource"].fn[fnName]["function"]) { + this._options.countFnName = fnName; + break; + } + } + } - this._initConvertTypes(); - } + this._initConvertTypes(); + } - // _convertStringToDate: - _convertStringToDate(data, fieldName, targetFieldName?) { - const transport = this; - let array, ablType, orig; + // _convertStringToDate: + _convertStringToDate(data, fieldName, targetFieldName?) { + const transport = this; + let + array, + ablType, + orig; - if (!targetFieldName) { - targetFieldName = fieldName; - } - // Check if string is -- - array = - transport._convertFields._datePattern.exec(data[targetFieldName]) || []; - if (array.length > 0) { - data[targetFieldName] = new Date( - parseInt(array[1], 10), - parseInt(array[2], 10) - 1, - parseInt(array[3], 10) - ); - } else { - ablType = - transport.jsdo[transport._tableRef]._fields[fieldName.toLowerCase()] - .ablType; - if (ablType === "DATETIME") { - array = - transport._convertFields._dateTimePattern.exec( - data[targetFieldName] - ) || []; + if (!targetFieldName) { + targetFieldName = fieldName; + } + // Check if string is -- + array = transport._convertFields._datePattern.exec(data[targetFieldName]) || []; if (array.length > 0) { - // Convert date to local time zone - data[targetFieldName] = new Date( - parseInt(array[1], 10), - parseInt(array[2], 10) - 1, - parseInt(array[3], 10), - parseInt(array[4], 10), - parseInt(array[5], 10), - parseInt(array[6], 10), - parseInt(array[7], 10) - ); - } - } - - // Check to see if it was converted - if (typeof data[targetFieldName] === "string") { - orig = data[targetFieldName]; - try { - data[targetFieldName] = new Date(data[targetFieldName]); - } catch (e) { - // Conversion to a date object was not successful - data[targetFieldName] = orig; - console.log( - "DataSource: Internal Error: _convertStringToDate() could not convert to date object: " + - orig - ); - } - } - } - } - - // _convertDataTypes: - // Converts data types in the specified data record. - // Data record could come from the JSDO or from the Kendo UI DataSource. - // Returns a reference to the record. - // Returns a copy when useArrays is undefined or false. - _convertDataTypes(data) { - const transport = this; - let i, k, fieldName, schemaInfo, prefixElement, elementName, copy; - - // Use transport_jsdo as any to avoid exposing internal JSDO methods - const transport_jsdo: any = transport.jsdo; - - if ( - !transport.useArrays && - transport._convertTypes && - transport._convertFields._arrayFields.length > 0 - ) { - copy = {}; - transport_jsdo._copyRecord( - transport_jsdo._buffers[transport._tableRef], - data, - copy - ); - data = copy; - } + data[targetFieldName] = new Date(parseInt(array[1], 10), + parseInt(array[2], 10) - 1, + parseInt(array[3], 10)); + } else { + ablType = transport.jsdo[transport._tableRef]._fields[fieldName.toLowerCase()].ablType; + if (ablType === "DATETIME") { + array = transport._convertFields._dateTimePattern.exec(data[targetFieldName]) || []; + if (array.length > 0) { + // Convert date to local time zone + data[targetFieldName] = new Date(parseInt(array[1], 10), + parseInt(array[2], 10) - 1, + parseInt(array[3], 10), + parseInt(array[4], 10), + parseInt(array[5], 10), + parseInt(array[6], 10), + parseInt(array[7], 10)); + } + } - if (!transport._convertTypes) { - return data; + // Check to see if it was converted + if (typeof (data[targetFieldName]) === "string") { + orig = data[targetFieldName]; + try { + data[targetFieldName] = new Date(data[targetFieldName]); + } catch (e) { + // Conversion to a date object was not successful + data[targetFieldName] = orig; + console.log( + "DataSource: Internal Error: _convertStringToDate() could not convert to date object: " + orig); + } + } + } } - for (k = 0; k < transport._convertFields._arrayFields.length; k += 1) { - fieldName = transport._convertFields._arrayFields[k]; - if (data[fieldName]) { - schemaInfo = - transport.jsdo[transport._tableRef]._fields[fieldName.toLowerCase()]; - prefixElement = transport_jsdo._getArrayField(fieldName); - for (i = 0; i < schemaInfo.maxItems; i += 1) { - // ABL arrays are 1-based - elementName = prefixElement.name + (i + 1); - - if ( - !transport.jsdo[transport._tableRef]._fields[ - elementName.toLowerCase() - ] - ) { - // Skip element if a field with the same name exists - // Extract value from array field into individual field - // Array is removed later - data[elementName] = data[fieldName][i]; - - // Convert string DATE fields to JS DATE - if ( - schemaInfo.ablType && - schemaInfo.ablType.indexOf("DATE") === 0 && - typeof data[elementName] === "string" - ) { - transport._convertStringToDate(data, fieldName, elementName); + // _convertDataTypes: + // Converts data types in the specified data record. + // Data record could come from the JSDO or from the Kendo UI DataSource. + // Returns a reference to the record. + // Returns a copy when useArrays is undefined or false. + _convertDataTypes(data) { + const transport = this; + let + i, + k, + fieldName, + schemaInfo, + prefixElement, + elementName, + copy; + + // Use transport_jsdo as any to avoid exposing internal JSDO methods + const transport_jsdo: any = transport.jsdo; + + if (!transport.useArrays && transport._convertTypes && (transport._convertFields._arrayFields.length > 0)) { + copy = {}; + transport_jsdo._copyRecord(transport_jsdo._buffers[transport._tableRef], data, copy); + data = copy; + } + + if (!transport._convertTypes) { + return data; + } + + for (k = 0; k < transport._convertFields._arrayFields.length; k += 1) { + fieldName = transport._convertFields._arrayFields[k]; + if (data[fieldName]) { + schemaInfo = transport.jsdo[transport._tableRef]._fields[fieldName.toLowerCase()]; + prefixElement = transport_jsdo._getArrayField(fieldName); + for (i = 0; i < schemaInfo.maxItems; i += 1) { + // ABL arrays are 1-based + elementName = prefixElement.name + (i + 1); + + if (!transport.jsdo[transport._tableRef]._fields[elementName.toLowerCase()]) { + // Skip element if a field with the same name exists + // Extract value from array field into individual field + // Array is removed later + data[elementName] = data[fieldName][i]; + + // Convert string DATE fields to JS DATE + if ((schemaInfo.ablType) + && (schemaInfo.ablType.indexOf("DATE") === 0) && (typeof (data[elementName]) === "string")) { + transport._convertStringToDate(data, fieldName, elementName); + } + } + } + if (!transport.useArrays) { + delete data[fieldName]; + } } - } } - if (!transport.useArrays) { - delete data[fieldName]; + + for (k = 0; k < transport._convertFields._dateFields.length; k += 1) { + fieldName = transport._convertFields._dateFields[k]; + if (typeof (data[fieldName]) === "string") { + transport._convertStringToDate(data, fieldName); + } } - } - } - for (k = 0; k < transport._convertFields._dateFields.length; k += 1) { - fieldName = transport._convertFields._dateFields[k]; - if (typeof data[fieldName] === "string") { - transport._convertStringToDate(data, fieldName); - } - } + return data; + } + + // _initConvertTypes: + // Initializes transport._convertTypes to indicate whether a conversion of the data is needed + // when it is passed to Kendo UI. + // This operation is currently only needed for date fields that are stored as strings. + // Sets array _dateFields to the fields of date fields to convert. + _initConvertTypes() { + const transport = this; + let i, + schema, + fieldName, + convertDateFields = false; + const + dateFields = [], + arrayFields = []; + + transport._convertTypes = false; + + schema = transport.jsdo[transport._tableRef].getSchema(); + for (i = 0; i < schema.length; i += 1) { + fieldName = schema[i].name; + if (fieldName.length > 0 && fieldName.charAt(0) !== "_") { + if (schema[i].type === "string" && + schema[i].format && + (schema[i].format.indexOf("date") !== -1)) { + dateFields.push(fieldName); + if (!convertDateFields) { + convertDateFields = true; + } + } else if (!transport.useArrays && schema[i].type === "array") { + arrayFields.push(fieldName); + if (!convertDateFields && schema[i].ablType && + schema[i].ablType.indexOf("DATE") === 0) { + convertDateFields = true; + } + } + } + } - return data; - } - - // _initConvertTypes: - // Initializes transport._convertTypes to indicate whether a conversion of the data is needed - // when it is passed to Kendo UI. - // This operation is currently only needed for date fields that are stored as strings. - // Sets array _dateFields to the fields of date fields to convert. - _initConvertTypes() { - const transport = this; - let i, - schema, - fieldName, - convertDateFields = false; - const dateFields = [], - arrayFields = []; - - transport._convertTypes = false; - - schema = transport.jsdo[transport._tableRef].getSchema(); - for (i = 0; i < schema.length; i += 1) { - fieldName = schema[i].name; - if (fieldName.length > 0 && fieldName.charAt(0) !== "_") { - if ( - schema[i].type === "string" && - schema[i].format && - schema[i].format.indexOf("date") !== -1 - ) { - dateFields.push(fieldName); - if (!convertDateFields) { - convertDateFields = true; - } - } else if (!transport.useArrays && schema[i].type === "array") { - arrayFields.push(fieldName); - if ( - !convertDateFields && - schema[i].ablType && - schema[i].ablType.indexOf("DATE") === 0 - ) { - convertDateFields = true; - } - } - } + if (dateFields.length > 0 || arrayFields.length > 0) { + transport._convertTypes = true; + // _convertFields: Object containing arrays for each data type to convert + transport._convertFields = {}; + transport._convertFields._arrayFields = []; + transport._convertFields._dateFields = []; + } + if (dateFields.length > 0) { + transport._convertFields._dateFields = dateFields; + } + if (convertDateFields) { + transport._convertFields._datePattern = new RegExp("^([0-9]+)?-([0-9]{2})?-([0-9]{2})?$"); + transport._convertFields._dateTimePattern = new RegExp( + "^([0-9]+)?-([0-9]{2})?-([0-9]{2})?" + + "T([0-9]{2})?:([0-9]{2})?:([0-9]{2})?.([0-9]{3})?$" + ); + } + if (arrayFields.length > 0) { + transport._convertFields._arrayFields = arrayFields; + } } - if (dateFields.length > 0 || arrayFields.length > 0) { - transport._convertTypes = true; - // _convertFields: Object containing arrays for each data type to convert - transport._convertFields = {}; - transport._convertFields._arrayFields = []; - transport._convertFields._dateFields = []; - } - if (dateFields.length > 0) { - transport._convertFields._dateFields = dateFields; - } - if (convertDateFields) { - transport._convertFields._datePattern = new RegExp( - "^([0-9]+)?-([0-9]{2})?-([0-9]{2})?$" - ); - transport._convertFields._dateTimePattern = new RegExp( - "^([0-9]+)?-([0-9]{2})?-([0-9]{2})?" + - "T([0-9]{2})?:([0-9]{2})?:([0-9]{2})?.([0-9]{3})?$" - ); - } - if (arrayFields.length > 0) { - transport._convertFields._arrayFields = arrayFields; - } - } - - /** - * Calls the jsdo.fill() retrieving data from the backend service - * @returns An Observable which includes an Array followed - * by an attribute for specifying 'total' records - */ - read(params?: progress.data.FilterOptions): Observable { - let wrapperPromise; - let obs: Observable; - let filter: any = {}; - const jsdo = this.jsdo; - const tableRef = this._tableRef; - - // If this is a DataSource for a child table, check if read() was performed on parent - if (!this._initFromServer) { - if (jsdo[tableRef]._parent) { - this._initFromServer = - (jsdo[jsdo[tableRef]._parent]._data && - jsdo[jsdo[tableRef]._parent]._data.length > 0) || - (jsdo[tableRef]._data instanceof Array && - jsdo[tableRef]._data.length > 0); - } else { - this._initFromServer = - jsdo[tableRef]._data instanceof Array && - jsdo[tableRef]._data.length > 0; - } - } + /** + * Calls the jsdo.fill() retrieving data from the backend service + * @returns An Observable which includes an Array followed + * by an attribute for specifying 'total' records + */ + read(params?: progress.data.FilterOptions): Observable { + let wrapperPromise; + let obs: Observable; + let filter: any = {}; + const jsdo = this.jsdo; + const tableRef = this._tableRef; + + // If this is a DataSource for a child table, check if read() was performed on parent + if (!this._initFromServer) { + if (jsdo[tableRef]._parent) { + this._initFromServer = (jsdo[jsdo[tableRef]._parent]._data && + (jsdo[jsdo[tableRef]._parent]._data.length > 0)) + || (jsdo[tableRef]._data instanceof Array && (jsdo[tableRef]._data.length > 0)); + } else { + this._initFromServer = (jsdo[tableRef]._data instanceof Array) && (jsdo[tableRef]._data.length > 0); + } + } - if (this.readLocal && this._initFromServer) { - return Observable.create(observer => { - const data = this.getJsdoData(); - observer.next({ data: data, total: data.length }); - }); - } + if (this.readLocal && this._initFromServer) { + return Observable.create((observer) => { + const data = this.getJsdoData(); + observer.next({ data: data, total: data.length }); + }); + } - if (params && Object.keys(params).length > 0) { - filter = params; - } else { - // If params has no properties, use default values for filter criteria - if ( - this._options.filter || - this._options.sort || - this._options.top || - this._options.skip - ) { - filter.filter = this._options.filter; - filter.sort = this._options.sort; - filter.top = this._options.top; - filter.skip = this._options.skip; - } else { - filter = undefined; - } - } + if (params && Object.keys(params).length > 0) { + filter = params; + } else { + // If params has no properties, use default values for filter criteria + if (this._options.filter || this._options.sort || this._options.top || this._options.skip) { + filter.filter = this._options.filter; + filter.sort = this._options.sort; + filter.top = this._options.top; + filter.skip = this._options.skip; + } else { + filter = undefined; + } + } - // tableRef required for multi-table DataSets - if (filter) { - filter.tableRef = this._tableRef; - } + // tableRef required for multi-table DataSets + if (filter) { + filter.tableRef = this._tableRef; + } - wrapperPromise = new Promise((resolve, reject) => { - jsdo - .fill(filter) - .then(result => { - // Verifying the latest resultset value and setting _isLastResultSetEmpty flag if empty - - if ( - result.request.response[this.jsdo["_dataSetName"]][ - this._tableRef - ] && - result.request.response[this.jsdo["_dataSetName"]][this._tableRef] - .length === 0 - ) { - this._isLastResultSetEmpty = true; - } else if ( - result.request.response[this.jsdo["_dataSetName"]] && - result.request.response[this.jsdo["_dataSetName"]][ - this._tableRef - ] === undefined - ) { - this._isLastResultSetEmpty = true; - } else if ( - result.request.response[this.jsdo["_dataSetName"]][ - this._tableRef - ] && - result.request.response[this.jsdo["_dataSetName"]][this._tableRef] - .length !== 0 - ) { - this._isLastResultSetEmpty = false; - } - - this._initFromServer = true; - - const data = this.getJsdoData(); - - // Only call count() function if paging is being used - // Paging is only used if the skip and top is being used during the fill. - if ( - typeof params !== "undefined" && - (typeof this._options.countFnName !== "undefined" && - typeof params.skip !== "undefined" && - typeof params.top !== "undefined") && - !(params.skip === 0 && params.top > data.length) - ) { - // Server-side operations - this.getRecCount(this._options.countFnName, { - filter: result.request.objParam - ? result.request.objParam.filter - : undefined - }) - .then( - res => { - if (res === undefined && res == null) { - reject( - this.normalizedErrorObj( - res, - "Unexpected response from 'Count Function' Operation", - "" - ) - ); - } else { - resolve({ data, total: res }); - } - }, - error => { - reject( - this.normalizedErrorObj( - error, - "Problems invoking getRecCount function", - "" - ) - ); - } - ) - .catch(e => { - reject( - this.normalizedErrorObj( - e, - "Unknown error occurred calling count.", - "" - ) - ); - }); - } else { - // Client side operations - resolve({ data, total: data.length }); - } - }) - .catch(result => { - reject(this.normalizedErrorObj(result, "read", "")); - }); - }); - - obs = from(wrapperPromise); - obs.pipe( - catchError(e => { - return []; - }) - ); - - return obs; - } - - /** - * Returns array of record objects from local memory - * @returns Array - */ - getData(): Array { - return this.getJsdoData(); - } - - /** - * Calls the jsdo.add() method, creating a new record in JSDO memory - * jsdo.add() will either return the new record, or throws an exception - * @param data - Record to create is passed as an object - * @returns - If successful, an object of the new record is returned - */ - create(data: object): object { - let jsRecord; - const newRow = {}; - const saveUseRelationships = this.jsdo.useRelationships; - - try { - this.jsdo.useRelationships = false; - jsRecord = this.jsdo[this._tableRef].add(data); - this._copyRecord(jsRecord.data, newRow); - } catch (error) { - if (this.jsdo.autoApplyChanges) { - this.jsdo[this._tableRef].rejectChanges(); - } - throw error; - } finally { - this.jsdo.useRelationships = saveUseRelationships; - } + wrapperPromise = new Promise( + (resolve, reject) => { + jsdo.fill(filter) + .then((result) => { + + // Verifying the latest resultset value and setting _isLastResultSetEmpty flag if empty + + if (result.request.response[this.jsdo["_dataSetName"]][this._tableRef] + && result.request.response[this.jsdo["_dataSetName"]][this._tableRef].length === 0) { + this._isLastResultSetEmpty = true; + } else if (result.request.response[this.jsdo["_dataSetName"]] + && result.request.response[this.jsdo["_dataSetName"]][this._tableRef] === undefined) { + this._isLastResultSetEmpty = true; + } else if (result.request.response[this.jsdo["_dataSetName"]][this._tableRef] + && result.request.response[this.jsdo["_dataSetName"]][this._tableRef].length !== 0) { + this._isLastResultSetEmpty = false; + } + + this._initFromServer = true; + + const data = this.getJsdoData(); + + // Only call count() function if paging is being used + // Paging is only used if the skip and top is being used during the fill. + if (typeof params !== "undefined" && + (typeof this._options.countFnName !== "undefined" && typeof params.skip !== "undefined" && typeof params.top !== "undefined") + && !(params.skip === 0 && params.top > data.length)) { // Server-side operations + this.getRecCount( + this._options.countFnName, + { filter: result.request.objParam ? result.request.objParam.filter : undefined }) + .then((res) => { + if (res === undefined && res == null) { + reject(this.normalizedErrorObj(res, + "Unexpected response from 'Count Function' Operation", "")); + } else { + resolve({ data, total: res }); + } + }, (error) => { + reject(this.normalizedErrorObj(error, + "Problems invoking getRecCount function", "")); + }).catch((e) => { + reject(this.normalizedErrorObj(e, + "Unknown error occurred calling count.", "")); + }); + } else { + // Client side operations + resolve({ data, total: data.length }); + } + + }).catch((result) => { + reject(this.normalizedErrorObj(result, "read", "")); + }); + } + ); + + obs = from(wrapperPromise); + obs.pipe(catchError((e) => { + return []; + })); - return newRow; - } - - /** - * Returns a copy of the record with the specified id. - * Note: current implementation uses jsdo's internal _id as id. - * @param id - id of record - * @returns - copy of record with specified id, else null if no record found - */ - findById(id: string): object { - let jsRecord; - const row = {}; - - // For now, we are using _id as our id to find records.. - jsRecord = this.jsdo[this._options.tableRef].findById(id, false); - if (jsRecord) { - this._copyRecord(jsRecord.data, row); - - return row; - } else { - return null; + return obs; } - } - - /** - * Calls the jsdo.update() method, for updating a record in JSDO memory - * jsdo.update() will either return the updated record, or throws an exception - * @param data - Record to create is passed as an object - * @returns - boolean. True if successful, false if there is any failure - */ - update(data: any): boolean { - const saveUseRelationships = this.jsdo.useRelationships; - - if (!data && (data === undefined || null)) { - throw new Error("Unexpected signature for update() operation."); + + /** + * Returns array of record objects from local memory + * @returns Array + */ + getData(): Array { + return this.getJsdoData(); } - const id: string = data && data._id ? data._id : null; - let jsRecord; - let retVal = false; + /** + * Calls the jsdo.add() method, creating a new record in JSDO memory + * jsdo.add() will either return the new record, or throws an exception + * @param data - Record to create is passed as an object + * @returns - If successful, an object of the new record is returned + */ + create(data: object): object { + let jsRecord; + const newRow = {}; + const saveUseRelationships = this.jsdo.useRelationships; - if (!id) { - throw new Error("DataSource.update(): data missing _id property"); - } + try { + this.jsdo.useRelationships = false; + jsRecord = this.jsdo[this._tableRef].add(data); + this._copyRecord(jsRecord.data, newRow); + } catch (error) { + if (this.jsdo.autoApplyChanges) { + this.jsdo[this._tableRef].rejectChanges(); + } + throw error; + } finally { + this.jsdo.useRelationships = saveUseRelationships; + } - try { - this.jsdo.useRelationships = false; - jsRecord = this.jsdo[this._tableRef].findById(id); - if (jsRecord) { - // Found a valid record. Lets update now - retVal = jsRecord.assign(data); - this.jsdo.useRelationships = saveUseRelationships; - } else { - throw new Error( - "DataSource.update(): Unable to find record with this id " + id - ); - } - } catch (error) { - if (this.jsdo.autoApplyChanges) { - this.jsdo[this._tableRef].rejectChanges(); - } - throw error; - } finally { - this.jsdo.useRelationships = saveUseRelationships; + return newRow; } - return retVal; - } - - /** - * Deletes a record from JSDO memory by calling jsdo.remove() API. This accepts a record - * with a valid _id without which an error is reported - * @param data Provide valid record for deletion - * @returns boolean - True if the operation succeeds, false otherwise - */ - remove(data: any): boolean { - let retVal = false; - const id: string = data && data._id ? data._id : null; - const saveUseRelationships = this.jsdo.useRelationships; - let jsRecord; - - if (!data && (data === undefined || null)) { - throw new Error("Unexpected signature for remove() operation."); - } + /** + * Returns a copy of the record with the specified id. + * Note: current implementation uses jsdo's internal _id as id. + * @param id - id of record + * @returns - copy of record with specified id, else null if no record found + */ + findById(id: string): object { + let jsRecord; + const row = {}; + + // For now, we are using _id as our id to find records.. + jsRecord = this.jsdo[this._options.tableRef].findById(id, false); + if (jsRecord) { + this._copyRecord(jsRecord.data, row); - if (!id) { - throw new Error("DataSource.remove(): data missing _id property"); + return row; + } else { + + return null; + } } - try { - this.jsdo.useRelationships = false; - jsRecord = this.jsdo[this._tableRef].findById(id); - if (jsRecord) { - // Found a valid record. Lets delete the record - retVal = jsRecord.remove(data); - } else { - throw new Error( - "DataSource.remove(): Unable to find record with this id " + id - ); - } - } catch (error) { - if (this.jsdo.autoApplyChanges) { - this.jsdo[this._tableRef].rejectChanges(); - } - throw error; - } finally { - this.jsdo.useRelationships = saveUseRelationships; + /** + * Calls the jsdo.update() method, for updating a record in JSDO memory + * jsdo.update() will either return the updated record, or throws an exception + * @param data - Record to create is passed as an object + * @returns - boolean. True if successful, false if there is any failure + */ + update(data: any): boolean { + const saveUseRelationships = this.jsdo.useRelationships; + + if (!data && (data === undefined || null)) { + throw new Error("Unexpected signature for update() operation."); + } + + const id: string = (data && data._id) ? data._id : null; + let jsRecord; + let retVal = false; + + if (!id) { + throw new Error("DataSource.update(): data missing _id property"); + } + + try { + this.jsdo.useRelationships = false; + jsRecord = this.jsdo[this._tableRef].findById(id); + if (jsRecord) { + // Found a valid record. Lets update now + retVal = jsRecord.assign(data); + this.jsdo.useRelationships = saveUseRelationships; + } else { + throw new Error("DataSource.update(): Unable to find record with this id " + id); + } + } catch (error) { + if (this.jsdo.autoApplyChanges) { + this.jsdo[this._tableRef].rejectChanges(); + } + throw error; + } finally { + this.jsdo.useRelationships = saveUseRelationships; + } + + return retVal; } - return retVal; - } - - /** - * Returns true if the underlying jsdo has CUD support (create, update, delete operations). - * If not, it returns false. - */ - hasCUDSupport(): boolean { - return this.jsdo.hasCUDOperations; - } - - /** - * Returns true if the underlying jsdo has Submit support (submit operation). - * If not, it returns false. - */ - hasSubmitSupport(): boolean { - return this.jsdo.hasSubmitOperation; - } - - /** - * Synchronizes to the server all record changes (creates, updates, and deletes) pending in - * JSDO memory for the current Data Object resource - * If jsdo.hasSubmitOperation is false, all record modifications are sent to server individually. - * When 'true', modifications are batched together and sent in single request - * @returns {object} Observable - */ - saveChanges(): Observable> { - let promise; - let obs: Observable>; - const promResponse: object = {}; - let tableRefVal: any; - - promise = new Promise((resolve, reject) => { - const responseData: object = {}; - - this.jsdo - .saveChanges(this.jsdo.hasSubmitOperation) - .then(result => { - tableRefVal = this._tableRef; - if (this.jsdo.hasSubmitOperation) { - // Submit case - this._copyRecord(result.request.response, responseData); - resolve(responseData); - } else { - // Non-Submit case - if ( - result.request && - result.request.batch.operations && - result.request.batch.operations.length > 0 - ) { - result.request.batch.operations.forEach(operation => { - this._copyRecord(operation.response, responseData); - // In case of multiple operations we want to merge those records pertaining - // to different operations in a single dataset and is sent as part of the - // response object for the consumer of this API. - this._buildResponse(responseData, promResponse); - }); - resolve(promResponse); - // Scenario where the saveChanges is invoked directly without any Submit/Non-Submit - // service as the serviceURI. We will resolve with an empty object - } else if ( - result.request && - result.request.batch.operations.length === 0 - ) { - resolve({}); + /** + * Deletes a record from JSDO memory by calling jsdo.remove() API. This accepts a record + * with a valid _id without which an error is reported + * @param data Provide valid record for deletion + * @returns boolean - True if the operation succeeds, false otherwise + */ + remove(data: any): boolean { + let retVal = false; + const id: string = (data && data._id) ? data._id : null; + const saveUseRelationships = this.jsdo.useRelationships; + let jsRecord; + + if (!data && (data === undefined || null)) { + throw new Error("Unexpected signature for remove() operation."); + } + + if (!id) { + throw new Error("DataSource.remove(): data missing _id property"); + } + + try { + this.jsdo.useRelationships = false; + jsRecord = this.jsdo[this._tableRef].findById(id); + if (jsRecord) { + // Found a valid record. Lets delete the record + retVal = jsRecord.remove(data); } else { - // Reject promise if either of above cases are not met - reject( - this.normalizedErrorObj( - result, - "saveChanges", - "Errors occurred while saving Changes." - ) - ); + throw new Error("DataSource.remove(): Unable to find record with this id " + id); + } + } catch (error) { + if (this.jsdo.autoApplyChanges) { + this.jsdo[this._tableRef].rejectChanges(); } - } - }) - .catch(result => { - if (this.jsdo.autoApplyChanges) { - this.jsdo[this._tableRef].rejectChanges(); - } - reject( - this.normalizedErrorObj( - result, - "saveChanges", - "Errors occurred while saving Changes." - ) - ); - }); - }); - - obs = from(promise); - obs.pipe( - catchError(e => { - return []; - }) - ); - - return obs; - } - - /** - * First, retrieves data from JSDO local memory - * Then makes a copy of it, to ensure jsdo memory is only manipulated thru DataSource API - * Returns array of record objects - * @returns Array - */ - private getJsdoData(): Array { - const jsdo = this.jsdo; - const saveUseRelationships = jsdo.useRelationships; - let data; - let copy; - let array; - - jsdo.useRelationships = false; - data = jsdo[this._tableRef].getData(); - jsdo.useRelationships = saveUseRelationships; - - // Make copy of jsdo data for datasource - if (this._convertTypes) { - array = []; - data.forEach(item => { - if (!this.useArrays && this._convertFields._arrayFields.length > 0) { - // Use a reference - // _convertDataTypes() will create the copy for this case - copy = item; + throw error; + } finally { + this.jsdo.useRelationships = saveUseRelationships; + } + + return retVal; + } + + /** + * Returns true if the underlying jsdo has CUD support (create, update, delete operations). + * If not, it returns false. + */ + hasCUDSupport(): boolean { + return this.jsdo.hasCUDOperations; + } + + /** + * Returns true if the underlying jsdo has Submit support (submit operation). + * If not, it returns false. + */ + hasSubmitSupport(): boolean { + return this.jsdo.hasSubmitOperation; + } + + /** + * Synchronizes to the server all record changes (creates, updates, and deletes) pending in + * JSDO memory for the current Data Object resource + * If jsdo.hasSubmitOperation is false, all record modifications are sent to server individually. + * When 'true', modifications are batched together and sent in single request + * @returns {object} Observable + */ + saveChanges(): Observable> { + let promise; + let obs: Observable>; + const promResponse: object = {}; + let tableRefVal: any; + + promise = new Promise( + (resolve, reject) => { + const responseData: object = {}; + + this.jsdo.saveChanges(this.jsdo.hasSubmitOperation) + .then((result) => { + tableRefVal = this._tableRef; + if (this.jsdo.hasSubmitOperation) { + // Submit case + this._copyRecord(result.request.response, responseData); + resolve(responseData); + } else { + // Non-Submit case + if (result.request && result.request.batch.operations && result.request.batch.operations.length > 0) { + result.request.batch.operations.forEach((operation) => { + this._copyRecord(operation.response, responseData); + // In case of multiple operations we want to merge those records pertaining + // to different operations in a single dataset and is sent as part of the + // response object for the consumer of this API. + this._buildResponse(responseData, promResponse); + }); + resolve(promResponse); + // Scenario where the saveChanges is invoked directly without any Submit/Non-Submit + // service as the serviceURI. We will resolve with an empty object + } else if (result.request && result.request.batch.operations.length === 0) { + resolve({}); + } else { // Reject promise if either of above cases are not met + reject(this + .normalizedErrorObj(result, "saveChanges", "Errors occurred while saving Changes.")); + } + } + }).catch((result) => { + if (this.jsdo.autoApplyChanges) { + this.jsdo[this._tableRef].rejectChanges(); + } + reject(this + .normalizedErrorObj(result, "saveChanges", "Errors occurred while saving Changes.")); + }); + } + ); + + obs = from(promise); + obs.pipe(catchError((e) => { + return []; + })); + + return obs; + } + + /** + * First, retrieves data from JSDO local memory + * Then makes a copy of it, to ensure jsdo memory is only manipulated thru DataSource API + * Returns array of record objects + * @returns Array + */ + private getJsdoData(): Array { + const jsdo = this.jsdo; + const saveUseRelationships = jsdo.useRelationships; + let data; + let copy; + let array; + + jsdo.useRelationships = false; + data = jsdo[this._tableRef].getData(); + jsdo.useRelationships = saveUseRelationships; + + // Make copy of jsdo data for datasource + if (this._convertTypes) { + array = []; + data.forEach(item => { + if (!this.useArrays && this._convertFields._arrayFields.length > 0) { + // Use a reference + // _convertDataTypes() will create the copy for this case + copy = item; + } else { + copy = Object.assign({}, item); + } + + copy = this._convertDataTypes(copy); + array.push(copy); + }); + data = array; } else { - copy = Object.assign({}, item); + data = (data.length > 0 ? data.map((item) => Object.assign({}, item)) : []); } - copy = this._convertDataTypes(copy); - array.push(copy); - }); - data = array; - } else { - data = data.length > 0 ? data.map(item => Object.assign({}, item)) : []; - } + return data; + } + + /** + * This method is used for fetching the 'count' of records from backend + * This method is used as part of read() operation when serverOperations is set by client + * @param {string} name Name of the method pertaining to 'Count' functionality + * @param {any} object Filter object + */ + private getRecCount(name: string, object: any): Promise { + let countVal: any; + let getRecCountPromise; + + getRecCountPromise = new Promise( + (resolve, reject) => { + this.jsdo.invoke(name, object) + .then((result) => { + + try { + if (typeof (result.request.response) === "object" + && Object.keys(result.request.response).length === 1) { + countVal = Object.values(result.request.response)[0]; + if (typeof (countVal) !== "number") { + countVal = undefined; + } + } + resolve(countVal); + } catch (e) { + reject(this.normalizedErrorObj(e, "getRecCount", "")); + } + }).catch((result) => { + reject(this.normalizedErrorObj(result, "Error invoking the 'Count' operation", "")); + }); + }); + + return getRecCountPromise; + } + + /** + * This method is called after an error has occurred on a jsdo operation, and is + * used to get an error message. + * @param {any} result Object containing error info returned after execution of jsdo operation + * @param {string} operation String containing operation performed when error occurred + * @param {string} genericMsg If multiple errors are found in result object, if specified, + * this string will be returned. If not specified, first error string will be returned. + * @returns A single error message + */ + private normalizeError(result: any, operation: string, genericMsg: string) { + let errorMsg = ""; + let lastErrors = null; - return data; - } - - /** - * This method is used for fetching the 'count' of records from backend - * This method is used as part of read() operation when serverOperations is set by client - * @param {string} name Name of the method pertaining to 'Count' functionality - * @param {any} object Filter object - */ - private getRecCount(name: string, object: any): Promise { - let countVal: any; - let getRecCountPromise; - - getRecCountPromise = new Promise((resolve, reject) => { - this.jsdo - .invoke(name, object) - .then(result => { - try { - if ( - typeof result.request.response === "object" && - Object.keys(result.request.response).length === 1 - ) { - countVal = Object.values(result.request.response)[0]; - if (typeof countVal !== "number") { - countVal = undefined; - } + try { + if (result.info && result.info.errorObject) { + errorMsg = result.info.errorObject.message; + } else if (result.jsdo) { + lastErrors = result.jsdo[this._tableRef].getErrors(); + if (lastErrors.length >= 1) { + // If generic message is provided, use that, else we'll just grab first message + if (lastErrors.length > 1 && genericMsg) { + errorMsg = genericMsg; + } else { + errorMsg = lastErrors[0].error; + } + } + } else if (result.message) { + errorMsg = result.message; } - resolve(countVal); - } catch (e) { - reject(this.normalizedErrorObj(e, "getRecCount", "")); - } - }) - .catch(result => { - reject( - this.normalizedErrorObj( - result, - "Error invoking the 'Count' operation", - "" - ) - ); - }); - }); - - return getRecCountPromise; - } - - /** - * This method is called after an error has occurred on a jsdo operation, and is - * used to get an error message. - * @param {any} result Object containing error info returned after execution of jsdo operation - * @param {string} operation String containing operation performed when error occurred - * @param {string} genericMsg If multiple errors are found in result object, if specified, - * this string will be returned. If not specified, first error string will be returned. - * @returns A single error message - */ - private normalizeError(result: any, operation: string, genericMsg: string) { - let errorMsg = ""; - let lastErrors = null; - - try { - if (result.info && result.info.errorObject) { - errorMsg = result.info.errorObject.message; - } else if (result.jsdo) { - lastErrors = result.jsdo[this._tableRef].getErrors(); - if (lastErrors.length >= 1) { - // If generic message is provided, use that, else we'll just grab first message - if (lastErrors.length > 1 && genericMsg) { - errorMsg = genericMsg; - } else { - errorMsg = lastErrors[0].error; - } - } - } else if (result.message) { - errorMsg = result.message; - } - - if (errorMsg === "") { - errorMsg = "Unknown error occurred when calling " + operation + "."; - } - } catch (error) { - errorMsg = error.message; - } - return errorMsg; - } - - /** - * This method is called after an error has occurred on a jsdo operation, and is - * used to get an error object. - * @param {any} result Object containing error info returned after execution of jsdo operation - * @param {string} operation String containing operation performed when error occurred - * @param {string} genericMsg If multiple errors are found in result object, if specified, - * this string will be returned as part of the new error object. If not specified, first error - * string will be returned. - * @returns A single error object with all information - */ - private normalizedErrorObj( - result: any, - operation: string, - genericMsg: string - ) { - let errorObj: { [key: string]: any } = {}; - let eMsg = ""; - let object: { [key: string]: any } = {}; - - if (result && result.jsdo && result.success == false) { - object = result.request; + if (errorMsg === "") { + errorMsg = "Unknown error occurred when calling " + operation + "."; + } + } catch (error) { + errorMsg = error.message; + } + + return errorMsg; } - eMsg = this.normalizeError(result, operation, genericMsg); + /** + * This method is called after an error has occurred on a jsdo operation, and is + * used to get an error object. + * @param {any} result Object containing error info returned after execution of jsdo operation + * @param {string} operation String containing operation performed when error occurred + * @param {string} genericMsg If multiple errors are found in result object, if specified, + * this string will be returned as part of the new error object. If not specified, first error + * string will be returned. + * @returns A single error object with all information + */ + private normalizedErrorObj(result: any, operation: string, genericMsg: string) { + let errorObj: {[key: string]: any} = {}; + let eMsg = ""; + let object: {[key: string]: any} = {}; + + if (result && result.jsdo && result.success == false) { + object = result.request; + } + + eMsg = this.normalizeError(result, operation, genericMsg); - errorObj = new Error(eMsg); - errorObj.info = object; + errorObj = new Error(eMsg); + errorObj.info = object; - return errorObj; - } + return errorObj; + } - private _copyRecord(source, target) { - let field; - let newObject; + private _copyRecord(source, target) { + let field; + let newObject; - if (!target) { - console.log("_copyRecord: target parameter is not defined"); + if (!target) { + console.log("_copyRecord: target parameter is not defined"); - return; - } + return; + } - for (field in source) { - if (source.hasOwnProperty(field)) { - // Ignore all internal fields, except _id - if ( - source[field] === undefined || - source[field] === null || - (field.charAt(0) === "_" && field !== "_id") || - field.startsWith("prods:") - ) { - continue; - } - - if (source[field] instanceof Date) { - target[field] = source[field]; - } else if (typeof source[field] === "object") { - newObject = source[field] instanceof Array ? [] : {}; - this._copyRecord(source[field], newObject); - target[field] = newObject; - } else { - target[field] = source[field]; + for (field in source) { + if (source.hasOwnProperty(field)) { + // Ignore all internal fields, except _id + if (source[field] === undefined || source[field] === null || + (field.charAt(0) === "_" && field !== "_id") || + field.startsWith("prods:")) { + continue; + } + + if (source[field] instanceof Date) { + target[field] = source[field]; + } else if (typeof source[field] === "object") { + newObject = source[field] instanceof Array ? [] : {}; + this._copyRecord(source[field], newObject); + target[field] = newObject; + } else { + target[field] = source[field]; + } + } } - } } - } - - /** - * This method is responsible for building a valid responseObject when multiple records - * are involved in transaction - * @param source Actual dataset/record to be merged - * @param target Resultant dataset with all records information - */ - private _buildResponse(source, target) { - const newEntry = source; - let firstKey = Object.keys(source)[0]; - const secondKey = firstKey ? Object.keys(source[firstKey])[0] : undefined; - - // Delete's on no submit services return empty datasets so - // don't add anything. - if ( - typeof source[firstKey] !== "undefined" && - typeof source[firstKey][secondKey] !== "undefined" - ) { - if (Object.keys(target).length === 0) { - this._copyRecord(source, target); - } else { - firstKey = Object.keys(target)[0]; + + /** + * This method is responsible for building a valid responseObject when multiple records + * are involved in transaction + * @param source Actual dataset/record to be merged + * @param target Resultant dataset with all records information + */ + private _buildResponse(source, target) { + const newEntry = source; + let firstKey = Object.keys(source)[0]; + const secondKey = (firstKey) ? Object.keys(source[firstKey])[0] : undefined; // Delete's on no submit services return empty datasets so // don't add anything. - if ( - firstKey && - typeof target[firstKey][this._tableRef] !== "undefined" - ) { - // Dataset usecase - if (firstKey !== this._tableRef) { - target[firstKey][this._tableRef].push( - newEntry[firstKey][this._tableRef][0] - ); - } else { - // Temp-table usecase - target[this._tableRef].push(newEntry[this._tableRef][0]); - } + if (typeof source[firstKey] !== "undefined" + && typeof source[firstKey][secondKey] !== "undefined") { - return target; + if (Object.keys(target).length === 0) { + this._copyRecord(source, target); + } else { + firstKey = Object.keys(target)[0]; + + // Delete's on no submit services return empty datasets so + // don't add anything. + if (firstKey && typeof target[firstKey][this._tableRef] !== "undefined") { + // Dataset usecase + if (firstKey !== this._tableRef) { + target[firstKey][this._tableRef].push(newEntry[firstKey][this._tableRef][0]); + } else { // Temp-table usecase + target[this._tableRef].push(newEntry[this._tableRef][0]); + } + + return target; + } + } } - } } - } } From b0be6e88abe779e129e00a494166e2281ffbe620 Mon Sep 17 00:00:00 2001 From: Damon Benson Date: Mon, 1 Apr 2019 12:26:13 -0400 Subject: [PATCH 33/59] ADAS-15578 Remove version.txt file and have build process pull version from package.json and prepend it to the js files - depend on package.json at all times for versioning information. Update contributing.md to point user to view in package.json . Update readme.md to remove text to suggest download of individual files (per MB) --- contributing.md | 2 +- readme.md | 2 +- version.txt | 23 ----------------------- 3 files changed, 2 insertions(+), 25 deletions(-) delete mode 100644 version.txt diff --git a/contributing.md b/contributing.md index b06ff82..36e2673 100644 --- a/contributing.md +++ b/contributing.md @@ -14,7 +14,7 @@ If your issue appears to be a bug, and hasn't been reported, open a new issue. T - **Overview of the issue:** Provide a short description of the visible symptoms. If applicable, include error messages, screen shots, and stack traces. - **Motivation for or use case:** Let us know how this particular issue affects your work. -- **JSDO version:** List the current version of the JSDO. You can find it by opening version.txt in the product root. +- **JSDO version:** List the current version of the JSDO. You can find it by opening package.json and viewing the version line - **System configuration:** Provide us with relevant system configuration information such as operating system, network connection, proxy usage, etc. Let us know if you have been able to reproduce the issue on multiple setups. - **Steps to reproduce:** If applicable, submit a step-by-step walkthrough of how to reproduce the issue. - **Related issues:** If you discover a similar issue in our archive, give us a heads up - it might help us identify the culprit. diff --git a/readme.md b/readme.md index ca8a0f1..b59671e 100644 --- a/readme.md +++ b/readme.md @@ -15,7 +15,7 @@ Progress® Data Objects, which include the JSDO on the client, represent the Pro ### Download -You can download a copy of the full JSDO to a zip file or the individual files below. +You can download a copy of the full JSDO to a zip file. | Source File | Purpose | | ----------------------------------------------------------------------------------------------------------- | ---------------------------------------------- | diff --git a/version.txt b/version.txt deleted file mode 100644 index 1535a09..0000000 --- a/version.txt +++ /dev/null @@ -1,23 +0,0 @@ -### JSDO FILE VERSIONS -progress.js.................................Version: 6.0.1 -progress.auth.js............................Version: 6.0.1 -progress.auth.Bearer.js.....................Version: 6.0.1 -progress.auth.basic.js......................Version: 6.0.1 -progress.auth.form.js.......................Version: 6.0.1 -progress.auth.sso.js........................Version: 6.0.1 -progress.data.kendo.js......................Version: 6.0.1 -progress.session.js.........................Version: 6.0.1 -progress.util.js............................Version: 6.0.1 -Progress Data Source for Angular:...........Version: 6.0.1 -Progress Data Source for NativeScript.......Version: 6.0.1 (the �Product�) -progress.data.ng.ds.ts......................Version: 6.0.1 -Progress JSDO Core Module...................Version: 6.0.1 -progress.data.ng.ds.ts......................Version: 6.0.1 - - -### JSDO and OpenEdge compatibility -|-----------------------------------------| -| JSDO version | OpenEdge version | -|----------------|------------------------| -| 6.0.1 | 11.7.x, 12.0.x | -|-----------------------------------------| From 087093044c2d3c743d07adf1fc4e26e27463c123 Mon Sep 17 00:00:00 2001 From: Alan Estrada Date: Mon, 1 Apr 2019 13:52:44 -0400 Subject: [PATCH 34/59] Removed a base-64 dependency Also updated some of the JS smoke tests --- package.json | 1 - src/progress.util.js | 18 +++++++----------- test/smoke.jsdo.js | 4 ++-- test/smoke.jsdosession.js | 12 ++++++------ 4 files changed, 15 insertions(+), 20 deletions(-) diff --git a/package.json b/package.json index f36f4fa..34ade56 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,6 @@ "peerDependencies": {}, "optionalDependencies": {}, "devDependencies": { - "base-64": "^0.1.0", "chai": "^4.1.2", "chai-as-promised": "^7.1.1", "concat": "^1.0.3", diff --git a/src/progress.util.js b/src/progress.util.js index 00b4abe..1803486 100644 --- a/src/progress.util.js +++ b/src/progress.util.js @@ -36,15 +36,13 @@ limitations under the License. // - xmlhttprequest // NativeScript: // - nativescript-localstorage - // - base-64 var isNativeScript = false, isNodeJS = false; var pkg_xmlhttprequest = "xmlhttprequest", pkg_nativescriptLocalstorage = "nativescript-localstorage", - pkg_fileSystemAccess = "file-system/file-system-access", - pkg_base64 = "base-64" + pkg_fileSystemAccess = "file-system/file-system-access" ; //In memory localStorage emulation used for node @@ -101,14 +99,13 @@ limitations under the License. + "Please install nativescript-localstorage package."); } - // load module base-64 + // Polyfill the btoa() function (which we use to encode BASIC authorization) try { if (typeof btoa === "undefined") { - btoa = require("" + pkg_base64).encode; + btoa = function(str) { return Buffer.from(str).toString('base64'); } } } catch(exception3) { - console.error("Error: JSDO library requires btoa() function in NativeScript.\n" - + "Please install base-64 package."); + console.error("Error: JSDO library requires toString('base-64') function in NativeScript."); } } @@ -121,14 +118,13 @@ limitations under the License. sessionStorage = new LocalStorageEmulation(); } - // load module base-64 + // Polyfill the btoa() function (which we use to encode BASIC authorization) try { if (typeof btoa === "undefined") { - btoa = require("" + pkg_base64).encode; + btoa = function(str) { return Buffer.from(str).toString('base64'); } } } catch(exception3) { - console.error("Error: JSDO library requires btoa() function in Node.js.\n" - + "Please install base-64 package."); + console.error("Error: JSDO library requires toString('base-64')function in Node.js."); } } }()); diff --git a/test/smoke.jsdo.js b/test/smoke.jsdo.js index 6b7adcb..b0d2e91 100644 --- a/test/smoke.jsdo.js +++ b/test/smoke.jsdo.js @@ -9,8 +9,8 @@ chai.use(chaiAsPromised); describe('JSDO Smoke Tests', () => { // INFORMATION YEAH const options = { - catalogURI: "http://172.29.18.125:8894/OEMobileDemoServices/static/CustomerService.json", - serviceURI: "http://172.29.18.125:8894/OEMobileDemoServices/", + catalogURI: "https://oemobiledemo.progress.com/OEMobileDemoServices/static/CustomerService.json", + serviceURI: "https://oemobiledemo.progress.com/OEMobileDemoServices/", resourceName: "Customer", authenticationModel: "anonymous" }; diff --git a/test/smoke.jsdosession.js b/test/smoke.jsdosession.js index 0c37fdc..bb777a6 100644 --- a/test/smoke.jsdosession.js +++ b/test/smoke.jsdosession.js @@ -9,8 +9,8 @@ chai.use(chaiAsPromised); describe('JSDOSession Smoke Tests', () => { // INFORMATION YEAH const options = { - catalogURI: 'http://172.29.18.125:8894/OEMobileDemoServices/static/CustomerService.json', - serviceURI: 'http://172.29.18.125:8894/OEMobileDemoServices/', + catalogURI: 'https://oemobiledemo.progress.com/OEMobileDemoServices/static/CustomerService.json', + serviceURI: 'https://oemobiledemo.progress.com/OEMobileDemoServices/', authenticationModel: 'anonymous' }; @@ -38,11 +38,11 @@ describe('JSDOSession Smoke Tests', () => { it('should connect to an existing basic backend', function () { let getSession = progress.data.getSession({ - serviceURI: 'http://172.29.18.125:8894/OEMobileDemoServicesBasic', - catalogURI: 'http://172.29.18.125:8894/OEMobileDemoServicesBasic/static/CustomerService.json', + serviceURI: 'https://oemobiledemo.progress.com/OEMobileDemoServicesBasic', + catalogURI: 'https://oemobiledemo.progress.com/OEMobileDemoServicesBasic/static/CustomerService.json', authenticationModel: 'basic', - username: 'restuser', - password: 'password' + username: 'basicuser', + password: 'basicpassword' }).then((object) => { object.jsdosession.invalidate(); return object.result; From 4d5454c179217f93e75a93989ce876be719a8bb1 Mon Sep 17 00:00:00 2001 From: Alan Estrada Date: Tue, 2 Apr 2019 12:58:25 -0400 Subject: [PATCH 35/59] Properly encode strings in the browser --- src/progress.util.js | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/progress.util.js b/src/progress.util.js index 1803486..cb2567d 100644 --- a/src/progress.util.js +++ b/src/progress.util.js @@ -105,7 +105,7 @@ limitations under the License. btoa = function(str) { return Buffer.from(str).toString('base64'); } } } catch(exception3) { - console.error("Error: JSDO library requires toString('base-64') function in NativeScript."); + console.error("Error: JSDO library requires toString('base64') function in NativeScript."); } } @@ -124,7 +124,22 @@ limitations under the License. btoa = function(str) { return Buffer.from(str).toString('base64'); } } } catch(exception3) { - console.error("Error: JSDO library requires toString('base-64')function in Node.js."); + console.error("Error: JSDO library requires toString('base64')function in Node.js."); + } + } + + // If we're running in the browser, edit btoa() to properly encode Unicode strings + // taken from https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/btoa#Unicode_strings + if (!isNodeJS && !isNativeScript) { + if (typeof btoa !== "undefined") { + let btoaOriginal = btoa; + + // this section of code is functionally identical to the toString('base-64') + // btoa() doesn't exist on node though, which is why we have different styles + // of encoding in NS/node + btoa = function (str) { + return btoaOriginal(unescape(encodeURIComponent(str))); + }; } } }()); From d73b5b00781d2f867c5eae62f7413594adb63204 Mon Sep 17 00:00:00 2001 From: Nicolette Date: Tue, 2 Apr 2019 19:03:54 -0400 Subject: [PATCH 36/59] remove base-64 dependency --- packages/nativescript/package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/nativescript/package.json b/packages/nativescript/package.json index 013bb83..20b61a6 100644 --- a/packages/nativescript/package.json +++ b/packages/nativescript/package.json @@ -36,7 +36,6 @@ "homepage": "https://github.com/progress/JSDO#readme", "dependencies": { "@progress/jsdo-core": "^6.0.1", - "base-64": "^0.1.0", "nativescript-localstorage": "^1.1.5", "zone.js": "^0.8.18" }, From 697f03282ef80d7df074193a5735977711371b0c Mon Sep 17 00:00:00 2001 From: Nicolette Date: Tue, 2 Apr 2019 19:05:53 -0400 Subject: [PATCH 37/59] remove base-64 license --- packages/nativescript/notice.txt | 21 +-------------------- 1 file changed, 1 insertion(+), 20 deletions(-) diff --git a/packages/nativescript/notice.txt b/packages/nativescript/notice.txt index 7d1f8a5..3c46a82 100644 --- a/packages/nativescript/notice.txt +++ b/packages/nativescript/notice.txt @@ -23,26 +23,7 @@ Permission is hereby granted, free of charge, to any person obtaining a copy of The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -(b) Progress Data Source for NativeScript incorporates base-64 v0.1.0. Such technology is subject to the following terms and conditions: -Copyright Mathias Bynens -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -(c) Progress Data Source for NativeScript incorporates nativescript-localstorage v2.0.0. Such technology is subject to the following terms and conditions: +(b) Progress Data Source for NativeScript incorporates nativescript-localstorage v2.0.0. Such technology is subject to the following terms and conditions: The MIT License (MIT) localstorage Copyright (c) 2016, Nathanael Anderson From 5021781dfb47bf5fe4491eb0a550e2f3538ebdb5 Mon Sep 17 00:00:00 2001 From: Nicolette Date: Wed, 3 Apr 2019 14:41:58 -0400 Subject: [PATCH 38/59] remove base-64 --- packages/node/package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/node/package.json b/packages/node/package.json index b8d4d33..acc0261 100644 --- a/packages/node/package.json +++ b/packages/node/package.json @@ -38,7 +38,6 @@ "homepage": "https://github.com/progress/JSDO#readme", "dependencies": { "@progress/jsdo-core": "^6.0.1", - "base-64": "^0.1.0", "xmlhttprequest": "^1.8.0", "@angular/core": "^6.1.0", "rxjs": "^6.0.0" @@ -54,4 +53,4 @@ "tslint": "^5.11.0", "typescript": "^3.1.3" } -} \ No newline at end of file +} From 2648463705d6fd0cb900ec3699bb95ebd65d4396 Mon Sep 17 00:00:00 2001 From: Nicolette Date: Wed, 3 Apr 2019 14:42:39 -0400 Subject: [PATCH 39/59] remove base-64 --- packages/node/notice.txt | 21 +-------------------- 1 file changed, 1 insertion(+), 20 deletions(-) diff --git a/packages/node/notice.txt b/packages/node/notice.txt index 80c9c88..bebfe1c 100644 --- a/packages/node/notice.txt +++ b/packages/node/notice.txt @@ -29,26 +29,7 @@ Permission is hereby granted, free of charge, to any person obtaining a copy of The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -(b) Progress Data Source for Node.js incorporates base-64 v0.1.0. Such technology is subject to the following terms and conditions: -Copyright Mathias Bynens -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -(c) Progress Data Source for Node.js incorporates node-localstorage v1.3.1. Such technology is subject to the following terms and conditions: +(b) Progress Data Source for Node.js incorporates node-localstorage v1.3.1. Such technology is subject to the following terms and conditions: MIT License Copyright (c) 2011, 2012, Lawrence S. Maccherone, Jr. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: From 6135ba045d02737ce03c92d7375582c1ce6483ff Mon Sep 17 00:00:00 2001 From: Nicolette Date: Wed, 3 Apr 2019 14:43:17 -0400 Subject: [PATCH 40/59] remove base-64 --- packages/ng-datasource/package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/ng-datasource/package.json b/packages/ng-datasource/package.json index ec77dee..3e558dd 100644 --- a/packages/ng-datasource/package.json +++ b/packages/ng-datasource/package.json @@ -42,7 +42,6 @@ "homepage": "https://github.com/progress/JSDO#readme", "dependencies": { "@progress/jsdo-core": "^6.0.1", - "base-64": "^0.1.0", "xmlhttprequest": "^1.8.0" }, "peerDependencies": { @@ -60,4 +59,4 @@ "tslint": "^5.11.0", "typescript": "^3.1.3" } -} \ No newline at end of file +} From 36a81e6d719a5406446ad586686ad082a7fe644b Mon Sep 17 00:00:00 2001 From: Alan Estrada Date: Mon, 8 Apr 2019 19:52:19 -0400 Subject: [PATCH 41/59] Added mocha unit tests for the basic authentication bug --- test/regressions/OCTA-11854.js | 72 ++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 test/regressions/OCTA-11854.js diff --git a/test/regressions/OCTA-11854.js b/test/regressions/OCTA-11854.js new file mode 100644 index 0000000..3b18990 --- /dev/null +++ b/test/regressions/OCTA-11854.js @@ -0,0 +1,72 @@ +const chai = require('chai'); +const expect = chai.expect; +const chaiAsPromised = require('chai-as-promised'); + +const progress = require("../../build/progress.jsdo").progress; + +chai.use(chaiAsPromised); + +// This bug correlates to https://github.com/progress/JSDO/issues/231 +// Basically, international characters weren't being properly encoded in the +// Authorization header for BASIC authentication. We switched to properly +// encoding it using the node Buffer().toString('base64') method. +describe('Unit Tests for BASIC Authentication with International Characters', () => { + // INFORMATION YEAH + const options = { + catalogURI: 'https://oemobiledemo.progress.com/OEMobileDemoServicesBasic/static/CustomerService.json', + serviceURI: 'https://oemobiledemo.progress.com/OEMobileDemoServicesBasic/', + authenticationModel: 'basic', + username: 'basicusé', + password: 'päword' + }; + + let session; + + // Logout of the session after we are done + after((done) => { + session.invalidate().then(() => done()); + }); + + describe('getSession Tests', function () { + it('should connect to an existing basic backend', function () { + let getSession = progress.data.getSession(options).then((object) => { + session = object.jsdosession; + return object.result; + }); + + return expect(getSession).to.eventually.equal(progress.data.Session.SUCCESS); + }); + }); + + describe('JSDOSession API Tests', function () { + it('should successfully ping() the backend', function() { + let ping = session.ping().then((object) => { + return true; + }); + + return expect(ping).to.eventually.equal(true); + }); + + it('should have a successful call to isAuthorized()', function() { + let isAuthorized = session.isAuthorized().then((object) => { + // If we have successfully logged into the backend, the result + // of our ping() should be true + return object.result; + }); + + return expect(isAuthorized).to.eventually.equal(progress.data.Session.SUCCESS); + }); + + it('should not have a connection to the backend after an invalidate', function() { + let isAuthorized = session.invalidate().then(() => { + return session.isAuthorized(); + }).then((object) => { + return object.result; + }, function(object) { + return object.result + }); + + return expect(isAuthorized).to.eventually.equal(progress.data.Session.GENERAL_FAILURE); + }) + }); +}); \ No newline at end of file From 83fba76b44dcc501981c1bd719c6c1f801f32ecb Mon Sep 17 00:00:00 2001 From: Nicolette Date: Tue, 16 Apr 2019 12:14:01 -0400 Subject: [PATCH 42/59] fixed tests to use oemobiledemo services --- packages/node/test/regressions/ADAS-7282.js | 4 ++-- test/regressions/ADAS-7828.JFP.DATE.js | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/node/test/regressions/ADAS-7282.js b/packages/node/test/regressions/ADAS-7282.js index 9bd1f04..d78ab96 100755 --- a/packages/node/test/regressions/ADAS-7282.js +++ b/packages/node/test/regressions/ADAS-7282.js @@ -14,8 +14,8 @@ chai.use(chaiAsPromised); describe('ADAS-7282: DataSource invokes count operation bug', function () { //options all the info required for creating a jsdo session const options = { - serviceURI: "http://172.29.18.125:8894/OEMobileDemoServices", - catalogURI: "http://172.29.18.125:8894/OEMobileDemoServices/static/SportsService.json", + serviceURI: "https://oemobiledemo.progress.com/OEMobileDemoServices", + catalogURI: "http://oemobiledemo.progress.com/OEMobileDemoServices/static/SportsService.json", resourceName: "SalesRep", authenticationModel: "anonymous", tableRef: "ttSalesRep" diff --git a/test/regressions/ADAS-7828.JFP.DATE.js b/test/regressions/ADAS-7828.JFP.DATE.js index 8c37d82..d38528b 100644 --- a/test/regressions/ADAS-7828.JFP.DATE.js +++ b/test/regressions/ADAS-7828.JFP.DATE.js @@ -6,12 +6,12 @@ const progress = require("../../build/progress.jsdo").progress; chai.use(chaiAsPromised); -describe('JSDO Setup', () => { +describe('JSDO Setup ADAS-7828', () => { // INFORMATION YEAH const options = { - catalogURI: "http://172.30.112.74:8810/datetimebug/static/dtService.json", - serviceURI: "http://172.30.112.74:8810/datetimebug/", - resourceName: "MySalesRep", + catalogURI: "http://oemobiledemo.progress.com/OEMobileDemoServices/static/r_Salesrep_HyphenDate.json", + serviceURI: "http://oemobiledemo.progress.com/OEMobileDemoServices/", + resourceName: "SalesRep_HyphenDate", authenticationModel: "anonymous" }; From f3dd317895ea8d0c739aa2f0d08d7448726197cf Mon Sep 17 00:00:00 2001 From: Nicolette Date: Tue, 16 Apr 2019 12:15:01 -0400 Subject: [PATCH 43/59] Revert "fixed tests to use oemobiledemo services" This reverts commit 83fba76b44dcc501981c1bd719c6c1f801f32ecb. --- packages/node/test/regressions/ADAS-7282.js | 4 ++-- test/regressions/ADAS-7828.JFP.DATE.js | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/node/test/regressions/ADAS-7282.js b/packages/node/test/regressions/ADAS-7282.js index d78ab96..9bd1f04 100755 --- a/packages/node/test/regressions/ADAS-7282.js +++ b/packages/node/test/regressions/ADAS-7282.js @@ -14,8 +14,8 @@ chai.use(chaiAsPromised); describe('ADAS-7282: DataSource invokes count operation bug', function () { //options all the info required for creating a jsdo session const options = { - serviceURI: "https://oemobiledemo.progress.com/OEMobileDemoServices", - catalogURI: "http://oemobiledemo.progress.com/OEMobileDemoServices/static/SportsService.json", + serviceURI: "http://172.29.18.125:8894/OEMobileDemoServices", + catalogURI: "http://172.29.18.125:8894/OEMobileDemoServices/static/SportsService.json", resourceName: "SalesRep", authenticationModel: "anonymous", tableRef: "ttSalesRep" diff --git a/test/regressions/ADAS-7828.JFP.DATE.js b/test/regressions/ADAS-7828.JFP.DATE.js index d38528b..8c37d82 100644 --- a/test/regressions/ADAS-7828.JFP.DATE.js +++ b/test/regressions/ADAS-7828.JFP.DATE.js @@ -6,12 +6,12 @@ const progress = require("../../build/progress.jsdo").progress; chai.use(chaiAsPromised); -describe('JSDO Setup ADAS-7828', () => { +describe('JSDO Setup', () => { // INFORMATION YEAH const options = { - catalogURI: "http://oemobiledemo.progress.com/OEMobileDemoServices/static/r_Salesrep_HyphenDate.json", - serviceURI: "http://oemobiledemo.progress.com/OEMobileDemoServices/", - resourceName: "SalesRep_HyphenDate", + catalogURI: "http://172.30.112.74:8810/datetimebug/static/dtService.json", + serviceURI: "http://172.30.112.74:8810/datetimebug/", + resourceName: "MySalesRep", authenticationModel: "anonymous" }; From 85bc34961ad64003aba2ae385ce4cb4032621148 Mon Sep 17 00:00:00 2001 From: Nicolette Date: Tue, 16 Apr 2019 12:18:53 -0400 Subject: [PATCH 44/59] fix mocha tests to use oemobiledemo services --- packages/node/test/regressions/ADAS-7282.js | 6 +++--- test/regressions/ADAS-7828.JFP.DATE.js | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/node/test/regressions/ADAS-7282.js b/packages/node/test/regressions/ADAS-7282.js index 9bd1f04..ae24c9e 100755 --- a/packages/node/test/regressions/ADAS-7282.js +++ b/packages/node/test/regressions/ADAS-7282.js @@ -14,8 +14,8 @@ chai.use(chaiAsPromised); describe('ADAS-7282: DataSource invokes count operation bug', function () { //options all the info required for creating a jsdo session const options = { - serviceURI: "http://172.29.18.125:8894/OEMobileDemoServices", - catalogURI: "http://172.29.18.125:8894/OEMobileDemoServices/static/SportsService.json", + serviceURI: "https://oemobiledemo.progress.com/OEMobileDemoServices", + catalogURI: "http://oemobiledemo.progress.com/OEMobileDemoServices/static/SportsService.json", resourceName: "SalesRep", authenticationModel: "anonymous", tableRef: "ttSalesRep" @@ -87,4 +87,4 @@ describe('ADAS-7282: DataSource invokes count operation bug', function () { }); }); -}); +}); \ No newline at end of file diff --git a/test/regressions/ADAS-7828.JFP.DATE.js b/test/regressions/ADAS-7828.JFP.DATE.js index 8c37d82..d38528b 100644 --- a/test/regressions/ADAS-7828.JFP.DATE.js +++ b/test/regressions/ADAS-7828.JFP.DATE.js @@ -6,12 +6,12 @@ const progress = require("../../build/progress.jsdo").progress; chai.use(chaiAsPromised); -describe('JSDO Setup', () => { +describe('JSDO Setup ADAS-7828', () => { // INFORMATION YEAH const options = { - catalogURI: "http://172.30.112.74:8810/datetimebug/static/dtService.json", - serviceURI: "http://172.30.112.74:8810/datetimebug/", - resourceName: "MySalesRep", + catalogURI: "http://oemobiledemo.progress.com/OEMobileDemoServices/static/r_Salesrep_HyphenDate.json", + serviceURI: "http://oemobiledemo.progress.com/OEMobileDemoServices/", + resourceName: "SalesRep_HyphenDate", authenticationModel: "anonymous" }; From 550bc97b6da0711a114c5c644ec3ee9be06d5555 Mon Sep 17 00:00:00 2001 From: Nicolette Date: Tue, 16 Apr 2019 13:04:51 -0400 Subject: [PATCH 45/59] this file also should be changed to oemobiledemo --- packages/node/test/smoke.datasource.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/node/test/smoke.datasource.js b/packages/node/test/smoke.datasource.js index b7fa139..5c86f7c 100644 --- a/packages/node/test/smoke.datasource.js +++ b/packages/node/test/smoke.datasource.js @@ -13,8 +13,8 @@ describe('Datasource Smoke Tests', function () { //options all the info required for creating a jsdo session const options = { // These services are running in Docker - serviceURI: "http://172.29.18.125:8894/OEMobileDemoServices/", - catalogURI: "http://172.29.18.125:8894/OEMobileDemoServices/static/CustomerService.json", + serviceURI: "http://oemobiledemo.progress.com/OEMobileDemoServices/", + catalogURI: "http://oemobiledemo.progress.com/OEMobileDemoServices/static/CustomerService.json", resourceName: "Customer", authenticationModel: "anonymous", tableRef: "ttCustomer", From 3b1ba1504043ce40d94074144a8ef8ac4f88b72a Mon Sep 17 00:00:00 2001 From: Nicolette Date: Tue, 16 Apr 2019 13:22:05 -0400 Subject: [PATCH 46/59] Update ADAS-7282.js --- packages/node/test/regressions/ADAS-7282.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/node/test/regressions/ADAS-7282.js b/packages/node/test/regressions/ADAS-7282.js index ae24c9e..5ee0c7a 100755 --- a/packages/node/test/regressions/ADAS-7282.js +++ b/packages/node/test/regressions/ADAS-7282.js @@ -14,7 +14,7 @@ chai.use(chaiAsPromised); describe('ADAS-7282: DataSource invokes count operation bug', function () { //options all the info required for creating a jsdo session const options = { - serviceURI: "https://oemobiledemo.progress.com/OEMobileDemoServices", + serviceURI: "http://oemobiledemo.progress.com/OEMobileDemoServices", catalogURI: "http://oemobiledemo.progress.com/OEMobileDemoServices/static/SportsService.json", resourceName: "SalesRep", authenticationModel: "anonymous", @@ -87,4 +87,4 @@ describe('ADAS-7282: DataSource invokes count operation bug', function () { }); }); -}); \ No newline at end of file +}); From f4a05da2d6ab0a2b325d3c46c40a1c898c15039c Mon Sep 17 00:00:00 2001 From: Nicolette Date: Wed, 17 Apr 2019 17:05:55 -0400 Subject: [PATCH 47/59] official update from legal --- packages/node/notice.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/node/notice.txt b/packages/node/notice.txt index bebfe1c..2da1457 100644 --- a/packages/node/notice.txt +++ b/packages/node/notice.txt @@ -36,7 +36,7 @@ Permission is hereby granted, free of charge, to any person obtaining a copy of The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -(d) Progress Data Source for Node.js incorporates xmlhttprequst v1.8.0. Such technology is subject to the following terms and conditions: +(c) Progress Data Source for Node.js incorporates xmlhttprequst v1.8.0. Such technology is subject to the following terms and conditions: Copyright (c) 2010 passive.ly LLC Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. @@ -47,4 +47,4 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI NOTICE FROM PROGRESS SOFTWARE CORPORATION: Additional notices may be included in the release notes or other documentation that accompanies updates received in connection with support of the Product. -Updated 3/18/2019 +Updated 4/8/2019 From 166b699b58727b78e0464212b49627f5d13de663 Mon Sep 17 00:00:00 2001 From: Shelley Chase Date: Fri, 19 Apr 2019 10:57:31 -0400 Subject: [PATCH 48/59] Update readme.md --- readme.md | 53 ++++++++++++++++++++++++++++------------------------- 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/readme.md b/readme.md index d294c81..5bc10a0 100644 --- a/readme.md +++ b/readme.md @@ -1,41 +1,44 @@ # JSDO -The JSDO is a JavaScript implementation of the CDO Specification published by Progress Software Corporation. -The JSDO is a free and open-source full-featured implementation that can be used in web, mobile web and hybrid mobile apps. + +The JSDO is a client side typescript library for Progress Data Object Services published by Progress Software Corporation. Its purpose is to provide an easy to understand API for querying, creating, updating and deleting Progress Data Objects as well as invoke server side business logic. +The JSDO is a free and open-source full-featured implementation that can be used in web, mobile web and hybrid mobile apps. ### Documentation -Progress® Data Objects, which include the JSDO on the client, represent the Progress-released implementation of Cloud Data Objects. For more information on the latest release, see the Progress Data Objects Guide and Reference. + +Progress® Data Objects in an OpenEdge business application can be accessed using the JSDO on the client. For more information, see the Overview of Progress Data Objects, Services and Catalogs. ### JSDO and OpenEdge compatibility + | JSDO version | OpenEdge version | -|----|----| -| 6.0.0 | 11.6.3, 11.6.4, 11.7.x | +| ------------ | ---------------- | +| 6.0.1 | 11.7.x, 12.0.x | ### Download -You can download a copy of the full JSDO to a zip file or the individual files below. - - -| Source File| Purpose | -| ---------- | ------- | -| [progress.js](https://github.com/progress/JSDO/blob/master/src/progress.js) | JSDO core | -| [progress.session.js](https://github.com/progress/JSDO/blob/master/src/progress.session.js) | JSDO session management | -| [progress.util.js](https://github.com/progress/JSDO/blob/master/src/progress.util.js) | Helper classes for the JSDO | -| [progress.data.kendo.js](https://github.com/progress/JSDO/blob/master/src/progress.data.kendo.js) | Kendo UI DataSource for the JSDO | -| [auth/progress.auth.js](https://github.com/progress/JSDO/blob/master/src/auth/progress.auth.js) | JSDO authentication provider | -| [auth/progress.auth.basic.js](https://github.com/progress/JSDO/blob/master/src/auth/progress.auth.basic.js) | JSDO authentication provider (BASIC auth) | -| [auth/progress.auth.form.js](https://github.com/progress/JSDO/blob/master/src/auth/progress.auth.form.js) | JSDO authentication provider (FORM-based auth) | -| [auth/progress.auth.sso.js](https://github.com/progress/JSDO/blob/master/src/auth/progress.auth.sso.js) | JSDO authentication provider (SSO auth) | - - -| Lib File| Purpose | -| ------- | ------- | -| [progress.all.js](https://github.com/progress/JSDO/blob/master/lib/progress.all.js) | The JSDO plus the Kendo UI DataSource for JSDO | -| [progress.all.min.js](https://github.com/progress/JSDO/blob/master/lib/progress.all.min.js) | The JSDO plus the Kendo UI DataSource for JSDO minified for deployment | -| [progress.jsdo.js](https://github.com/progress/JSDO/blob/master/lib/progress.jsdo.js) | The JSDO core components (JSDO, Session, Util classes) | + +You can download a copy of the full JSDO to a zip file. + +| Source File | Purpose | +| ----------------------------------------------------------------------------------------------------------- | ---------------------------------------------- | +| [progress.js](https://github.com/progress/JSDO/blob/master/src/progress.js) | JSDO core | +| [progress.session.js](https://github.com/progress/JSDO/blob/master/src/progress.session.js) | JSDO session management | +| [progress.util.js](https://github.com/progress/JSDO/blob/master/src/progress.util.js) | Helper classes for the JSDO | +| [progress.data.kendo.js](https://github.com/progress/JSDO/blob/master/src/progress.data.kendo.js) | Kendo UI DataSource for the JSDO | +| [auth/progress.auth.js](https://github.com/progress/JSDO/blob/master/src/auth/progress.auth.js) | JSDO authentication provider | +| [auth/progress.auth.basic.js](https://github.com/progress/JSDO/blob/master/src/auth/progress.auth.basic.js) | JSDO authentication provider (BASIC auth) | +| [auth/progress.auth.form.js](https://github.com/progress/JSDO/blob/master/src/auth/progress.auth.form.js) | JSDO authentication provider (FORM-based auth) | +| [auth/progress.auth.sso.js](https://github.com/progress/JSDO/blob/master/src/auth/progress.auth.sso.js) | JSDO authentication provider (SSO auth) | + +| Lib File | Purpose | +| --------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ | +| [progress.all.js](https://github.com/progress/JSDO/blob/master/lib/progress.all.js) | The JSDO plus the Kendo UI DataSource for JSDO | +| [progress.all.min.js](https://github.com/progress/JSDO/blob/master/lib/progress.all.min.js) | The JSDO plus the Kendo UI DataSource for JSDO minified for deployment | +| [progress.jsdo.js](https://github.com/progress/JSDO/blob/master/lib/progress.jsdo.js) | The JSDO core components (JSDO, Session, Util classes) | | [progress.jsdo.min.js](https://github.com/progress/JSDO/blob/master/lib/progress.jsdo.min.js) | The JSDO core components (JSDO, Session, Util classes) minified for deployment | The JSDO can be used by hybrid mobile apps, mobile web apps and web browser apps to access OpenEdge and Rollbase servers. Other implementations include a client in a mobile Hybrid App (a variation of the browser client), a Telerik® NativeScript client, a Node.js server, and a Java server. The JSDO has successfully been used with servers other than OpenEdge such as Node.js to export data created / aggregated in Modulus™ to a Progress® Rollbase Application. ### License + Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 From 3368a93fd939f08afe9d028cd13a24bbb9b649c6 Mon Sep 17 00:00:00 2001 From: joeyoconnell <42154923+joeyoconnell@users.noreply.github.com> Date: Fri, 19 Apr 2019 11:33:23 -0400 Subject: [PATCH 49/59] Update readme.md Making changes based on Shelley's feedback. --- packages/core/readme.md | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/packages/core/readme.md b/packages/core/readme.md index c9aadab..5ad1486 100644 --- a/packages/core/readme.md +++ b/packages/core/readme.md @@ -1,20 +1,30 @@ # JSDO Core Module -The JSDO Core Module is an implementation of the JSDO used to provide support to the Progress Data Source component. +The JSDO Core Module is an implementation of the JSDO used to access the Progress Data Source component. The JSDO can be used by hybrid mobile apps, mobile web apps, and web browser apps to access OpenEdge and Rollbase servers. Other implementations include a client in a mobile Hybrid App (a variation of the browser client), a Telerik® NativeScript client, a Node.js server, and a Java server. The JSDO has successfully been used with servers other than OpenEdge such as Node.js to export data to a Progress® Rollbase Application. -### Documentation +### Getting Started + +#### Installation -Progress® Data Objects, which include the JSDO on the client, represent the Progress-released implementation of Cloud Data Objects. For more information on the latest release, see the Progress Data Objects Guide and Reference. +`npm install @progress/jsdo-core` + +### Documentation +Progress® Data Objects in an OpenEdge business application can be accessed using the JSDO on the client. For more information, see the Progress Data Objects Guide and Reference. ### JSDO and OpenEdge compatibility | JSDO version | OpenEdge version | | ------------ | ---------------- | -| 6.0.x | 11.7.x, 12.0.x | +| 6.0.0, 5.0.1 | 11.6.4, 11.7.x | +| 6.0.1 | 12.0.x | ### Download -You can download a copy of the full JSDO to a zip file or the individual files below. +You can download a copy of the full JSDO to a zip file or download one of the data sources that extend the JSDO below: + +* Data source for Angular +* Data source for NativeScript +* Data source for Node ### License From 6c65dc7c18c22730debe7d8aa0e1e8b1b70c4be5 Mon Sep 17 00:00:00 2001 From: joeyoconnell <42154923+joeyoconnell@users.noreply.github.com> Date: Fri, 19 Apr 2019 11:39:03 -0400 Subject: [PATCH 50/59] Update readme.md Adding a note at Shelley's request. --- readme.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/readme.md b/readme.md index b59671e..0e009ef 100644 --- a/readme.md +++ b/readme.md @@ -3,6 +3,8 @@ The JSDO is a JavaScript implementation of the CDO Specification published by Progress Software Corporation. The JSDO is a free and open-source full-featured implementation that can be used in web, mobile web and hybrid mobile apps. +**Note**: A newer version of this repository can be found at JSDO Core Module. + ### Documentation Progress® Data Objects, which include the JSDO on the client, represent the Progress-released implementation of Cloud Data Objects. For more information on the latest release, see the Progress Data Objects Guide and Reference. From 999d7552f03b20ac0c6be5bac93af4f959e7dc98 Mon Sep 17 00:00:00 2001 From: joeyoconnell <42154923+joeyoconnell@users.noreply.github.com> Date: Fri, 19 Apr 2019 11:40:04 -0400 Subject: [PATCH 51/59] Update readme.md Removing previous note. --- readme.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/readme.md b/readme.md index 0e009ef..b59671e 100644 --- a/readme.md +++ b/readme.md @@ -3,8 +3,6 @@ The JSDO is a JavaScript implementation of the CDO Specification published by Progress Software Corporation. The JSDO is a free and open-source full-featured implementation that can be used in web, mobile web and hybrid mobile apps. -**Note**: A newer version of this repository can be found at JSDO Core Module. - ### Documentation Progress® Data Objects, which include the JSDO on the client, represent the Progress-released implementation of Cloud Data Objects. For more information on the latest release, see the Progress Data Objects Guide and Reference. From 0ee4e7a3c8aed85b0497df0a1150e752a85b4684 Mon Sep 17 00:00:00 2001 From: joeyoconnell <42154923+joeyoconnell@users.noreply.github.com> Date: Fri, 19 Apr 2019 11:51:33 -0400 Subject: [PATCH 52/59] Update readme.md Updating readme based on Shelley's comments. --- packages/angular/readme.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/angular/readme.md b/packages/angular/readme.md index d2a32df..d8a160a 100644 --- a/packages/angular/readme.md +++ b/packages/angular/readme.md @@ -1,10 +1,10 @@ # Progress Data Source for Angular -The Progress Data Source is a TypeScript implementation - Progress Data Source class for NativeScript, Angular. This will provide a seamless integration between OpenEdge (Progress Data Object) with NativeScript and Angular". +The Progress Data Source for Angular is a TypeScript implementation that extends the JSDO for Angular. This provides a seamless integration between OpenEdge (Progress Data Object Service) with NativeScript and Angular. ### Documentation -Progress® Data Objects, which include the JSDO on the client, represent the Progress-released implementation of Cloud Data Objects. For more information on the latest release, see the Progress Data Objects Guide and Reference. +Progress® Data Objects in an OpenEdge business application can be accessed using the Progress Data Source on the client. For more information, see the Progress Data Objects Guide and Reference. -The Data Source can be used by apps built using NativeScript, Angular and Node. +The Data Source can be used by apps built using Angular. ### License Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at From fc1f9112225a4827b4cd2727bdfe768ba8cecb5a Mon Sep 17 00:00:00 2001 From: joeyoconnell <42154923+joeyoconnell@users.noreply.github.com> Date: Fri, 19 Apr 2019 11:53:02 -0400 Subject: [PATCH 53/59] Update readme.md Updating the readme based on Shelley's comments. --- packages/nativescript/readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/nativescript/readme.md b/packages/nativescript/readme.md index 33d6260..dd1d073 100644 --- a/packages/nativescript/readme.md +++ b/packages/nativescript/readme.md @@ -1,8 +1,8 @@ # Progress Data Source for NativeScript -The Progress Data Source is a TypeScript implementation - Progress Data Source class for NativeScript, Angular. This will provide a seamless integration between OpenEdge (Progress Data Object) with NativeScript" +The Progress Data Source for NativeScript is a TypeScript implementation that extends the JSDO for NativeScript. This provides a seamless integration between OpenEdge (Progress Data Object Service) with NativeScript. ### Documentation -Progress® Data Objects, which include the JSDO on the client, represent the Progress-released implementation of Cloud Data Objects. For more information on the latest release, see the Progress Data Objects Guide and Reference. +Progress® Data Objects in an OpenEdge business application can be accessed using the Progress Data Source on the client. For more information, see the Progress Data Objects Guide and Reference. The Data Source can be used by mobile apps built using NativeScript. From 92ee3c446055f9b532f9ac90967dd54f8ee32267 Mon Sep 17 00:00:00 2001 From: joeyoconnell <42154923+joeyoconnell@users.noreply.github.com> Date: Fri, 19 Apr 2019 11:54:34 -0400 Subject: [PATCH 54/59] Update readme.md Updated readme based on Shelley's comments. --- packages/node/readme.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/node/readme.md b/packages/node/readme.md index 747005b..101fe7c 100644 --- a/packages/node/readme.md +++ b/packages/node/readme.md @@ -1,10 +1,10 @@ # Progress Data Source for Node -The Progress Data Source is a TypeScript implementation - Progress Data Source class for NativeScript, Angular. This will provide a seamless integration between OpenEdge (Progress Data Object) with NativeScript and Angular". +The Progress Data Source for Node is a TypeScript implementation that extends the JSDO for Node.js web apps. This provides a seamless integration between OpenEdge (Progress Data Object Service) with Node.js web apps. ### Documentation -Progress® Data Objects, which include the JSDO on the client, represent the Progress-released implementation of Cloud Data Objects. For more information on the latest release, see the Progress Data Objects Guide and Reference. +Progress® Data Objects in an OpenEdge business application can be accessed using the Progress Data Source on the client. For more information, see the Progress Data Objects Guide and Reference. -The Data Source can be used by apps built using NativeScript, Angular and Node. +The Data Source can be used by apps built as Node.js web apps. ### License Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at From 3ed41381166225762985fae790fa1113112a4028 Mon Sep 17 00:00:00 2001 From: joeyoconnell <42154923+joeyoconnell@users.noreply.github.com> Date: Fri, 19 Apr 2019 14:12:59 -0400 Subject: [PATCH 55/59] Update readme.md Additional update --- packages/core/readme.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/core/readme.md b/packages/core/readme.md index 5ad1486..34c3ec5 100644 --- a/packages/core/readme.md +++ b/packages/core/readme.md @@ -1,6 +1,10 @@ # JSDO Core Module -The JSDO Core Module is an implementation of the JSDO used to access the Progress Data Source component. The JSDO can be used by hybrid mobile apps, mobile web apps, and web browser apps to access OpenEdge and Rollbase servers. Other implementations include a client in a mobile Hybrid App (a variation of the browser client), a Telerik® NativeScript client, a Node.js server, and a Java server. The JSDO has successfully been used with servers other than OpenEdge such as Node.js to export data to a Progress® Rollbase Application. +This package is a client side typescript library for Progress Data Object Services. Its purpose is to provide an easy to understand API for querying, creating, updating and deleting Progress Data Objects as well as invoke server side business logic. + +The JSDO can be used by hybrid mobile apps, mobile web apps, and web browser apps to access OpenEdge and Rollbase servers. The JSDO has successfully been used with servers other than OpenEdge such as Node.js to export data to a Progress® Rollbase Application. + +Additional packages are available for Data Sources that further simplify the API for Angular, Telerik® NativeScript, and a Node.js server. ### Getting Started From 3112ebf2ce8d9c383146d0e061df05854f7a59e3 Mon Sep 17 00:00:00 2001 From: joeyoconnell <42154923+joeyoconnell@users.noreply.github.com> Date: Fri, 19 Apr 2019 14:13:48 -0400 Subject: [PATCH 56/59] Update readme.md Additional update --- packages/angular/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/angular/readme.md b/packages/angular/readme.md index d8a160a..6eceb93 100644 --- a/packages/angular/readme.md +++ b/packages/angular/readme.md @@ -1,5 +1,5 @@ # Progress Data Source for Angular -The Progress Data Source for Angular is a TypeScript implementation that extends the JSDO for Angular. This provides a seamless integration between OpenEdge (Progress Data Object Service) with NativeScript and Angular. +This package is a client side TypeScript implementation that extends the JSDO for Angular. This provides a seamless integration between OpenEdge (Progress Data Object Service) with NativeScript and Angular. ### Documentation Progress® Data Objects in an OpenEdge business application can be accessed using the Progress Data Source on the client. For more information, see the Progress Data Objects Guide and Reference. From 363d305d30c2211921ad54e7cfe208453bbc935e Mon Sep 17 00:00:00 2001 From: joeyoconnell <42154923+joeyoconnell@users.noreply.github.com> Date: Fri, 19 Apr 2019 14:14:33 -0400 Subject: [PATCH 57/59] Update readme.md Additional update --- packages/nativescript/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/nativescript/readme.md b/packages/nativescript/readme.md index dd1d073..6cdfa83 100644 --- a/packages/nativescript/readme.md +++ b/packages/nativescript/readme.md @@ -1,5 +1,5 @@ # Progress Data Source for NativeScript -The Progress Data Source for NativeScript is a TypeScript implementation that extends the JSDO for NativeScript. This provides a seamless integration between OpenEdge (Progress Data Object Service) with NativeScript. +This package is a client side TypeScript implementation that extends the JSDO for NativeScript. This provides a seamless integration between OpenEdge (Progress Data Object Service) with NativeScript. ### Documentation Progress® Data Objects in an OpenEdge business application can be accessed using the Progress Data Source on the client. For more information, see the Progress Data Objects Guide and Reference. From 59735f8e5225f7765e1150d506beb2b1ca142858 Mon Sep 17 00:00:00 2001 From: joeyoconnell <42154923+joeyoconnell@users.noreply.github.com> Date: Fri, 19 Apr 2019 14:15:38 -0400 Subject: [PATCH 58/59] Update readme.md Additional update --- packages/node/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/node/readme.md b/packages/node/readme.md index 101fe7c..6374b9d8 100644 --- a/packages/node/readme.md +++ b/packages/node/readme.md @@ -1,5 +1,5 @@ # Progress Data Source for Node -The Progress Data Source for Node is a TypeScript implementation that extends the JSDO for Node.js web apps. This provides a seamless integration between OpenEdge (Progress Data Object Service) with Node.js web apps. +This package is a client side TypeScript implementation that extends the JSDO for Node.js web apps. This provides a seamless integration between OpenEdge (Progress Data Object Service) with Node.js web apps. ### Documentation Progress® Data Objects in an OpenEdge business application can be accessed using the Progress Data Source on the client. For more information, see the Progress Data Objects Guide and Reference. From 459126a4487377f747eaa2a7d713f8e8d6f9e3d1 Mon Sep 17 00:00:00 2001 From: Nicolette Date: Fri, 19 Apr 2019 16:45:53 -0400 Subject: [PATCH 59/59] final compiled libraries for 6.0.1 --- lib/progress.all.js | 635 ++++++++++++++++++++++++----------- lib/progress.all.min.js | 6 +- lib/progress.all.min.js.map | 2 +- lib/progress.jsdo.js | 630 +++++++++++++++++++++++----------- lib/progress.jsdo.min.js | 6 +- lib/progress.jsdo.min.js.map | 2 +- 6 files changed, 888 insertions(+), 393 deletions(-) diff --git a/lib/progress.all.js b/lib/progress.all.js index 56596d6..379b735 100644 --- a/lib/progress.all.js +++ b/lib/progress.all.js @@ -1,7 +1,6 @@ +// Progress JSDO Version: 6.0.1 /* -Progress JSDO Version: 6.0.1 - -Copyright 2012-2018 Progress Software Corporation and/or its subsidiaries or affiliates. +Copyright 2012-2019 Progress Software Corporation and/or its subsidiaries or affiliates. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -18,9 +17,8 @@ limitations under the License. /*eslint no-global-assign: ["error", {"exceptions": ["localStorage"]}]*/ /*global XMLHttpRequest:true, require, console, localStorage:true, sessionStorage:true, $:true, Promise, setTimeout */ /* -progress.util.js Version: 6.0.1 -Copyright (c) 2014-2018 Progress Software Corporation and/or its subsidiaries or affiliates. +Copyright (c) 2014-2019 Progress Software Corporation and/or its subsidiaries or affiliates. Contains support objects used by the jsdo and/or session object @@ -52,21 +50,26 @@ limitations under the License. // Required packages should be installed before loading progress-jsdo. // Node.js: // - xmlhttprequest - // - node-localstorage // NativeScript: // - nativescript-localstorage - // - base-64 var isNativeScript = false, isNodeJS = false; var pkg_xmlhttprequest = "xmlhttprequest", - pkg_nodeLocalstorage = "node-localstorage", pkg_nativescriptLocalstorage = "nativescript-localstorage", - pkg_fileSystemAccess = "file-system/file-system-access", - pkg_base64 = "base-64" + pkg_fileSystemAccess = "file-system/file-system-access" ; + //In memory localStorage emulation used for node + function LocalStorageEmulation() { + this._data = {}; + }; + LocalStorageEmulation.prototype.setItem = function(id, val) { return this._data[id] = String(val); }, + LocalStorageEmulation.prototype.getItem = function(id) { return this._data.hasOwnProperty(id) ? this._data[id] : undefined; }, + LocalStorageEmulation.prototype.removeItem = function(id) { return delete this._data[id]; }, + LocalStorageEmulation.prototype.clear = function() { return this._data = {}; } + // If XMLHttpRequest is undefined, enviroment would appear to be Node.js // load xmlhttprequest module // Web browser and NativeScript clients have a built-in XMLHttpRequest object @@ -112,44 +115,47 @@ limitations under the License. + "Please install nativescript-localstorage package."); } - // load module base-64 + // Polyfill the btoa() function (which we use to encode BASIC authorization) try { if (typeof btoa === "undefined") { - btoa = require("" + pkg_base64).encode; + btoa = function(str) { return Buffer.from(str).toString('base64'); } } } catch(exception3) { - console.error("Error: JSDO library requires btoa() function in NativeScript.\n" - + "Please install base-64 package."); + console.error("Error: JSDO library requires toString('base64') function in NativeScript."); } } - // If environment is NodeJS, load module node-localstorage if (isNodeJS) { - var LocalStorage; if (typeof localStorage === "undefined") { - try { - var module = require("" + pkg_nodeLocalstorage); - LocalStorage = module.LocalStorage; - localStorage = new LocalStorage('./scratch1'); - } catch(e) { - console.error("Error: JSDO library requires localStorage and sessionStorage objects in Node.js.\n" - + "Please install node-localstorage package."); - } + localStorage = new LocalStorageEmulation(); } - if (typeof sessionStorage === "undefined" - && typeof LocalStorage !== "undefined") { - sessionStorage = new LocalStorage('./scratch2'); + if (typeof sessionStorage === "undefined") { + sessionStorage = new LocalStorageEmulation(); } - // load module base-64 + // Polyfill the btoa() function (which we use to encode BASIC authorization) try { if (typeof btoa === "undefined") { - btoa = require("" + pkg_base64).encode; + btoa = function(str) { return Buffer.from(str).toString('base64'); } } } catch(exception3) { - console.error("Error: JSDO library requires btoa() function in Node.js.\n" - + "Please install base-64 package."); + console.error("Error: JSDO library requires toString('base64')function in Node.js."); + } + } + + // If we're running in the browser, edit btoa() to properly encode Unicode strings + // taken from https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/btoa#Unicode_strings + if (!isNodeJS && !isNativeScript) { + if (typeof btoa !== "undefined") { + let btoaOriginal = btoa; + + // this section of code is functionally identical to the toString('base-64') + // btoa() doesn't exist on node though, which is why we have different styles + // of encoding in NS/node + btoa = function (str) { + return btoaOriginal(unescape(encodeURIComponent(str))); + }; } } }()); @@ -1095,9 +1101,7 @@ limitations under the License. }()); //# sourceURL=progress.jsdo.js /* -progress.js Version: 6.0.1 - -Copyright (c) 2012-2018 Progress Software Corporation and/or its subsidiaries or affiliates. +Copyright (c) 2012-2019 Progress Software Corporation and/or its subsidiaries or affiliates. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -7468,67 +7472,75 @@ limitations under the License. var xhr = this; if (xhr.readyState == 4) { var request = xhr.request; - - /* try to parse response even if request is considered "failed" due to http status */ try { - request.response = JSON.parse(xhr.responseText); - // in some cases the object back from appserver has a "response" property which represents - // the real content of the JSON...happens when multiple output parameters are returned. - // this of course assumes no one names their root object "response". - if (request.response && request.response.response) { - request.response = request.response.response; + + /* try to parse response even if request is considered "failed" due to http status */ + try { + request.response = JSON.parse(xhr.responseText); + // in some cases the object back from appserver has a "response" property which represents + // the real content of the JSON...happens when multiple output parameters are returned. + // this of course assumes no one names their root object "response". + if (request.response && request.response.response) { + request.response = request.response.response; + } + } catch (e) { + request.response = undefined; } - } catch (e) { - request.response = undefined; - } - try { - if ((xhr.status >= 200 && xhr.status < 300) - || (xhr.status === 0 && xhr.responseText !== "")) { - - request.success = true; - // get the Client Context ID (AppServer ID) - xhr.jsdo._session._saveClientContextId(xhr); - if ((typeof xhr.onSuccessFn) == 'function') { - var operation; - if (xhr.request.fnName !== undefined - && xhr.jsdo._resource.fn[xhr.request.fnName] !== undefined) { - operation = xhr.jsdo._resource.fn[xhr.request.fnName].operation; + try { + if ((xhr.status >= 200 && xhr.status < 300) + || (xhr.status === 0 && xhr.responseText !== "")) { + + request.success = true; + // get the Client Context ID (AppServer ID) + xhr.jsdo._session._saveClientContextId(xhr); + if ((typeof xhr.onSuccessFn) == 'function') { + var operation; + if (xhr.request.fnName !== undefined + && xhr.jsdo._resource.fn[xhr.request.fnName] !== undefined) { + operation = xhr.jsdo._resource.fn[xhr.request.fnName].operation; + } + else + operation = null; + if ((operation === undefined) || (operation !== null && operation.mergeMode)) + xhr.jsdo._mergeInvoke(request.response, xhr); + if (request.success) + xhr.onSuccessFn(xhr.jsdo, request.success, request); + else if ((typeof xhr.onErrorFn) == 'function') + xhr.onErrorFn(xhr.jsdo, request.success, request); } - else - operation = null; - if ((operation === undefined) || (operation !== null && operation.mergeMode)) - xhr.jsdo._mergeInvoke(request.response, xhr); - if (request.success) - xhr.onSuccessFn(xhr.jsdo, request.success, request); - else if ((typeof xhr.onErrorFn) == 'function') - xhr.onErrorFn(xhr.jsdo, request.success, request); - } - } else { - request.success = false; - if (xhr.status === 0) { - request.exception = new Error(msg.getMsgText("jsdoMSG101")); + } else { + request.success = false; + if (xhr.status === 0) { + request.exception = new Error(msg.getMsgText("jsdoMSG101")); + } + if ((typeof xhr.onErrorFn) == 'function') { + xhr.onErrorFn(xhr.jsdo, request.success, request); + } } + } catch (e) { + request.success = false; + request.exception = e; if ((typeof xhr.onErrorFn) == 'function') { xhr.onErrorFn(xhr.jsdo, request.success, request); } } - } catch (e) { - request.success = false; - request.exception = e; - if ((typeof xhr.onErrorFn) == 'function') { - xhr.onErrorFn(xhr.jsdo, request.success, request); + // get the Client Context ID (AppServer ID) + xhr.jsdo._session._checkServiceResponse(xhr, request.success, request); + + if ((typeof xhr.onCompleteFn) == 'function') { + xhr.onCompleteFn(xhr.jsdo, request.success, request); } - } - // get the Client Context ID (AppServer ID) - xhr.jsdo._session._checkServiceResponse(xhr, request.success, request); - if ((typeof xhr.onCompleteFn) == 'function') { - xhr.onCompleteFn(xhr.jsdo, request.success, request); + } catch (e) { + request.success = false; + request.exception = e; + if ((typeof xhr.onErrorFn) == 'function') { + xhr.onErrorFn(xhr.jsdo, request.success, request); + } + } } - - } }; /* @@ -8271,8 +8283,17 @@ limitations under the License. } } + // Christian Bryan - 10.02.2019 Add this back in + // Mike Fechner, Consultingwerk Ltd. 16.03.2016 + // Adding the tableRef property of the JSDO Parameters to + // the Filter Parameter so that the backend can use this + // information to actually know which Business Entity Table + // the query filter string is intended for ... + filter = JSON.stringify({ ablFilter: ablFilter, + tableRef: params.tableRef, + viewTables: jsdo.viewTables, sqlQuery: sqlQuery, orderBy: sortFields, skip: params.skip, @@ -8727,9 +8748,8 @@ limitations under the License. //this is so that we can see the code in Chrome's Source tab when script is loaded via XHR //# sourceURL=progress.jsdo.js /* -progress.session.js Version: 6.0.1 -Copyright (c) 2012-2018 Progress Software Corporation and/or its subsidiaries or affiliates. +Copyright (c) 2012-2019 Progress Software Corporation and/or its subsidiaries or affiliates. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -9525,7 +9545,9 @@ limitations under the License. // connects to online the last time it was checked? // (value is always false if session is not logged in) oepingAvailable = false, - defaultPartialPingURI = "/rest/_oeping", + hasResolvedPingURI = false, + defaultPartialPingURI = "/rest/_oepingService/_oeping", + classicPartialPingURI = "/rest/_oeping", partialPingURI = defaultPartialPingURI, _storageKey, _authProvider = null, @@ -9724,6 +9746,7 @@ limitations under the License. case progress.data.Session.AUTH_TYPE_BASIC: case progress.data.Session.AUTH_TYPE_ANON: case progress.data.Session.AUTH_TYPE_SSO: + case progress.data.Session.AUTH_TYPE_BEARER: case null: _authenticationModel = newval; storeSessionInfo("authenticationModel", newval); @@ -10833,7 +10856,8 @@ limitations under the License. xhr._jsdosession = jsdosession; // in case the caller is a JSDOSession xhr._deferred = deferred; // in case the caller is a JSDOSession if (this.authenticationModel === progress.data.Session.AUTH_TYPE_FORM || - this.authenticationModel === progress.data.Session.AUTH_TYPE_BASIC) { + this.authenticationModel === progress.data.Session.AUTH_TYPE_BASIC || + this.authenticationModel === progress.data.Session.AUTH_TYPE_BEARER) { if (isAsync) { xhr.onreadystatechange = this._onReadyStateChangeGeneric; xhr.onResponseFn = this._processLogoutResult; @@ -10929,7 +10953,8 @@ limitations under the License. } else if (xhr.status !== 200) { /* Determine whether an error returned from the server is really an error */ - if (pdsession.authenticationModel === progress.data.Session.AUTH_TYPE_BASIC) { + if (pdsession.authenticationModel === progress.data.Session.AUTH_TYPE_BASIC || + pdsession.authenticationModel === progress.data.Session.AUTH_TYPE_BEARER) { /* If the Auth model is Basic, we probably got back a 404 Not found. * But that's OK, because logout from Basic is meaningless on the * server side unless it happens to be stateful, which is the only @@ -11645,40 +11670,71 @@ limitations under the License. this._onReadyStateChangePing = function () { var xhr = this; var args; - - if (xhr.readyState === 4) { - args = { - xhr: xhr, - fireEventIfOfflineChange: true, - offlineReason: null - }; - that._processPingResult(args); - if (_pingInterval > 0) { - _timeoutID = setTimeout(that._autoping, _pingInterval); + try { + if (xhr.readyState === 4) { + args = { + xhr: xhr, + fireEventIfOfflineChange: true, + offlineReason: null + }; + that._processPingResult(args); + if (_pingInterval > 0) { + _timeoutID = setTimeout(that._autoping, _pingInterval); + } } + } catch(e) { } }; this._pingtestOnReadyStateChange = function () { var xhr = this; + try { + if (xhr.readyState === 4) { + var foundOeping = false; + if (xhr.status >= 200 && xhr.status < 300) { + foundOeping = true; + } else { + setPartialPingURI(that.loginTarget); + console.warn("Default ping target not available, will use loginTarget instead."); + } + setOepingAvailable(foundOeping); - if (xhr.readyState === 4) { - var foundOeping = false; - if (xhr.status >= 200 && xhr.status < 300) { - foundOeping = true; - } else { - setPartialPingURI(that.loginTarget); - console.warn("Default ping target not available, will use loginTarget instead."); + // If we're here, we've just logged in. If pingInterval has been set, we need + // to start autopinging + if (_pingInterval > 0) { + _timeoutID = setTimeout(that._autoping, _pingInterval); + } } - setOepingAvailable(foundOeping); + } catch(e) { + } + }; - // If we're here, we've just logged in. If pingInterval has been set, we need - // to start autopinging - if (_pingInterval > 0) { - _timeoutID = setTimeout(that._autoping, _pingInterval); + var resolvePingURI = () => { + var xhr = new XMLHttpRequest(), + deferred = new progress.util.Deferred(); + + xhr.onreadystatechange = () => { + if (xhr.readyState === 4) { + // If we can't find the new ping endpoint, we go back to the Classic Ping URI. + if (xhr.status === 404) { + setPartialPingURI(classicPartialPingURI); + deferred.reject(false); + } else { + deferred.resolve(true); + } + hasResolvedPingURI = true; } + }; + + // if we've resolved the pingURI OR we haven't logged in, then we don't have to do anything + if (hasResolvedPingURI || (this.loginResult !== progress.data.Session.LOGIN_SUCCESS && !this.authProvider)) { + deferred.resolve(true); + } else { + this._openRequest(xhr, "GET", partialPingURI, true, () => xhr.send()); } - }; + + return deferred.promise(); + } /* * args: pingURI @@ -11691,6 +11747,8 @@ limitations under the License. var xhr = new XMLHttpRequest(), that = this; + args.xhr = xhr; + function sendPingAfterOpen() { if (args.async) { xhr.onreadystatechange = args.onReadyStateFn; @@ -11710,30 +11768,35 @@ limitations under the License. xhr.send(null); } - try { - if (this._authProvider) { - this._authProvider._openRequestAndAuthorize( - xhr, - 'GET', - args.pingURI, - args.async, - sendPingAfterOpen - ); - } else { - // get rid of this if we do away with synchronous support (i.e., customer use of - // old Session API) - this._setXHRCredentials(xhr, "GET", args.pingURI, this.userName, _password, args.async); - - // Sending the XHR request after opening the channel - if (xhr.readyState === 1) { - sendPingAfterOpen(); + resolvePingURI().then(() => { + // do nothing on success because the new oePingService was found + }, () => { + // re-create the pingURI since we changed to the old classic AppServer ping URI + args.pingURI = this._makePingURI(); + }).then(() => { + try { + if (this._authProvider) { + this._authProvider._openRequestAndAuthorize( + xhr, + 'GET', + args.pingURI, + args.async, + sendPingAfterOpen + ); + } else { + // get rid of this if we do away with synchronous support (i.e., customer use of + // old Session API) + this._setXHRCredentials(xhr, "GET", args.pingURI, this.userName, _password, args.async); + + // Sending the XHR request after opening the channel + if (xhr.readyState === 1) { + sendPingAfterOpen(); + } } + } catch (e) { + args.error = e; } - } catch (e) { - args.error = e; - } - - args.xhr = xhr; + }) }; this._makePingURI = function () { @@ -12314,7 +12377,15 @@ limitations under the License. enumerable: true } ); - + Object.defineProperty( + progress.data.Session, + 'AUTH_TYPE_BEARER', + { + value: "bearer", + enumerable: true + } + ); + Object.defineProperty( progress.data.Session, 'DEVICE_OFFLINE', @@ -12369,6 +12440,7 @@ limitations under the License. progress.data.Session.AUTH_TYPE_BASIC = "basic"; progress.data.Session.AUTH_TYPE_FORM = "form"; progress.data.Session.AUTH_TYPE_SSO = "sso"; + progress.data.Session.AUTH_TYPE_BEARER = "bearer"; /* deliberately not including the "offline reasons" that are defined in the * 1st part of the conditional. We believe that we can be used only in environments where @@ -13192,34 +13264,36 @@ limitations under the License. var xhr = this, cbresult, info; - - if (xhr.readyState === 4) { - info = { - xhr: xhr, - offlineReason: undefined, - fireEventIfOfflineChange: true, - usingOepingFormat: false - }; - - // call _processPingResult because it has logic for - // detecting change in online/offline state - _pdsession._processPingResult(info); - - if (xhr.status >= 200 && xhr.status < 300) { - deferred.resolve( - that, - progress.data.Session.SUCCESS, - info - ); - } else { - if (xhr.status === 401) { - cbresult = progress.data.AuthenticationProvider._getAuthFailureReason(xhr); + try { + if (xhr.readyState === 4) { + info = { + xhr: xhr, + offlineReason: undefined, + fireEventIfOfflineChange: true, + usingOepingFormat: false + }; + + // call _processPingResult because it has logic for + // detecting change in online/offline state + _pdsession._processPingResult(info); + + if (xhr.status >= 200 && xhr.status < 300) { + deferred.resolve( + that, + progress.data.Session.SUCCESS, + info + ); } else { - cbresult = progress.data.Session.GENERAL_FAILURE; + if (xhr.status === 401) { + cbresult = progress.data.AuthenticationProvider._getAuthFailureReason(xhr); + } else { + cbresult = progress.data.Session.GENERAL_FAILURE; + } + deferred.reject(that, cbresult, info); } - deferred.reject(that, cbresult, info); } - } + } catch (e) { + } }; try { @@ -13458,8 +13532,8 @@ limitations under the License. progress.data.getSession = function (options) { var deferred = new progress.util.Deferred(), authProvider, - promise, - authProviderInitObject = {}; + authProviderInitObject = {}, + session; // This is the reject handler for session-related operations // login, addCatalog, and logout @@ -13487,26 +13561,23 @@ limitations under the License. } function loginHandler(object) { - var jsdosession; + let jsdosession; try { - jsdosession = new progress.data.JSDOSession(options); - try { - jsdosession.isAuthorized() - .then(function() { - return jsdosession.addCatalog(options.catalogURI); - }, sessionRejectHandler) - .then(function (object, result, info) { - object = progress.util.Deferred.getParamObject(object, result, info); - deferred.resolve(object.jsdosession, progress.data.Session.SUCCESS); - }, sessionRejectHandler); - } catch (e) { - sessionRejectHandler( - jsdosession, - progress.data.Session.GENERAL_FAILURE, - {errorObject: e} - ); + if (typeof session === "undefined") { + jsdosession = new progress.data.JSDOSession(options); + } else { + jsdosession = session; } + + jsdosession.isAuthorized() + .then(function() { + return jsdosession.addCatalog(options.catalogURI); + }, sessionRejectHandler) + .then(function (object, result, info) { + object = progress.util.Deferred.getParamObject(object, result, info); + deferred.resolve(object.jsdosession, progress.data.Session.SUCCESS); + }, sessionRejectHandler); } catch (ex) { sessionRejectHandler( jsdosession, @@ -13632,7 +13703,33 @@ limitations under the License. options.authProvider = authProvider; if (authProvider.hasClientCredentials()) { - loginHandler(authProvider); + // FAKE SESSION + let jsdosession = new progress.data.JSDOSession(options), + statusCode = 0; + + // This is a band-aid. We need to refactor and re-modularize + // getSession() now that the team has a better understanding + // of async operations --aestrada + jsdosession.isAuthorized().then(() => { + session = jsdosession; + return; + }, (obj) => { + statusCode = obj && obj.info && obj.info.xhr && obj.info.xhr.status; + return progress.util.Deferred.when([ + jsdosession.invalidate(), + options.authProvider.logout() + ]); + }).then(() => { + // If we have a 401, then we need to get rid of our old authProvider and try a fresh start + // Otherwise, we still good. + if (statusCode === 401) { + authProvider = new progress.data.AuthenticationProvider(authProviderInitObject); + options.authProvider = authProvider; + callLogin(authProvider); + } else { + loginHandler(authProvider); + } + }); } else { // If model is anon, just log in. if (authProvider.authenticationModel === progress.data.Session.AUTH_TYPE_ANON) { @@ -13699,12 +13796,10 @@ limitations under the License. if (typeof exports !== "undefined") { exports.progress = progress; } - //# sourceURL=progress.jsdo.js /* -progress.auth.js Version: 6.0.1 -Copyright (c) 2016-2017 Progress Software Corporation and/or its subsidiaries or affiliates. +Copyright (c) 2016-2019 Progress Software Corporation and/or its subsidiaries or affiliates. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -13791,6 +13886,9 @@ limitations under the License. case progress.data.Session.AUTH_TYPE_FORM_SSO: authProv = new progress.data.AuthenticationProviderSSO(initObject.uri); break; + case progress.data.Session.AUTH_TYPE_BEARER: + authProv = new progress.data.AuthenticationProviderBearer(initObject.uri); + break; default: // AuthenticationProvider: The 'init-object' parameter passed to the 'constructor' function // has an invalid value for the 'authenticationModel' property. @@ -13832,7 +13930,10 @@ limitations under the License. xhr.onreadystatechange = function () { if (xhr.readyState === 4) { // process the response from the Web application - that._processLoginResult(xhr, deferred); + try { + that._processLoginResult(xhr, deferred); + } catch (e) { + } } }; @@ -14173,9 +14274,8 @@ limitations under the License. //# sourceURL=progress.jsdo.js /* -progress.auth.basic.js Version: 6.0.1 -Copyright (c) 2016-2017 Progress Software Corporation and/or its subsidiaries or affiliates. +Copyright (c) 2016-2019 Progress Software Corporation and/or its subsidiaries or affiliates. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14332,9 +14432,154 @@ limitations under the License. }()); //# sourceURL=progress.jsdo.js /* -progress.auth.form.js Version: 6.0.1 -Copyright (c) 2016-2018 Progress Software Corporation and/or its subsidiaries or affiliates. + +Copyright (c) 2017-2019 Progress Software Corporation and/or its subsidiaries or affiliates. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + + */ + +(function () { + + "use strict"; // note that this makes JSLint complain if you use arguments[x] + + /*global progress : true*/ + /*global storage, XMLHttpRequest, msg, btoa*/ + + progress.data.AuthenticationProviderBearer = function (uri) { + var bearerToken = null, + fn; + + // process constructor arguments, etc. + this._initialize(uri, progress.data.Session.AUTH_TYPE_BEARER, + {"_loginURI": progress.data.AuthenticationProvider._homeLoginURIBase}); + + // PRIVATE FUNCTIONS + + function make_Bearer_auth_header(token) { + return "Bearer " + token; + } + + // "INTERNAL" METHODS + // Override the protoype's method but call it from within the override + // (Define the override here in the constructor so it has access to instance variables) + this._reset = function () { + bearerToken = null; + progress.data.AuthenticationProviderBearer.prototype._reset.apply(this); + }; + + // Override the protoype's method (this method does not invoke the prototype's copy) + // (Define the override here in the constructor so it has access to instance variables) + this._openLoginRequest = function (xhr, uri) { + var auth; + + xhr.open("GET", uri, true); // but see comments below inside the "if bearerToken" + // may have to go with that approach + + if (bearerToken) { + + // set Authorization header + auth = make_Bearer_auth_header(bearerToken); + xhr.setRequestHeader('Authorization', auth); + } + + progress.data.Session._setNoCacheHeaders(xhr); + }; + + // Override the protoype's method but call it from within the override + // (Define the override here in the constructor so it has access to instance variables) + this._processLoginResult = function _Bearer_processLoginResult(xhr, deferred) { + progress.data.AuthenticationProviderBearer.prototype._processLoginResult.apply( + this, + [xhr, deferred] + ); + if (!this._loggedIn) { + // login failed, clear the credentials + bearerToken = null; + } + }; + + // Override the protoype's method (this method does not invoke the prototype's copy, but + // calls a prototype general-purpose login method) + // (Define the override here in the constructor so it has access to instance variables) + this.login = function (token) { + // these throw if the check fails (may want to do something more elegant) + this._checkStringArg("login", token, 1, "token"); + + bearerToken = token; + return this._loginProto(); + }; + + // Override the protoype's method (this method does not invoke the prototype's copy) + // (Define the override here in the constructor so it has access to instance variables) + // TODO: This method uses a callback, primarily to avoid breaking tdriver tests. We should change + // it to use promises + this._openRequestAndAuthorize = function (xhr, verb, uri, async, callback) { + var auth, + errorObject; + + if (this.hasClientCredentials()) { + + xhr.open(verb, uri, async); // but see comments below inside the "if bearerToken" + // may have to go with that approach + + if (bearerToken) { + + // set Authorization header + auth = make_Bearer_auth_header(bearerToken); + xhr.setRequestHeader('Authorization', auth); + } + + progress.data.Session._setNoCacheHeaders(xhr); + } else { + // AuthenticationProvider: The AuthenticationProvider is not managing valid credentials. + errorObject = new Error(progress.data._getMsgText("jsdoMSG125", "AuthenticationProvider")); + } + + callback(errorObject); + }; + }; + + + // Give this constructor the prototype from the "base" AuthenticationProvider + // Do this indirectly by way of an intermediate object so changes to the prototype ("method overrides") + // don't affect other types of AuthenticationProviders that use the prototype) + function BearerProxy() {} + BearerProxy.prototype = progress.data.AuthenticationProvider.prototype; + progress.data.AuthenticationProviderBearer.prototype = new BearerProxy(); + + // Reset the prototype's constructor property so it points to AuthenticationProviderForm rather than + // the one that it just inherited (this is pretty much irrelevant though - the correct constructor + // will get called regardless) + progress.data.AuthenticationProviderBearer.prototype.constructor = + progress.data.AuthenticationProviderBearer; + + + // OVERRIDE METHODS ON PROTOTYPE IF NECESSARY AND POSSIBLE + // (SOME METHODS ARE OVERRIDDEN IN THE CONSTRUCTOR BECAUSE THEY NEED ACCESS TO INSTANCE VARIABLES) + + // NOTE: There are no overrides of the following methods (either here or in the constructor). + // This object uses these methods from the original prototype(i.e., the implementations from the + // AuthenticationProvider object): + // logout (API method) + // hasClientCredentials (API method) + +}()); +//# sourceURL=progress.jsdo.js +/* + +Copyright (c) 2016-2019 Progress Software Corporation and/or its subsidiaries or affiliates. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14451,7 +14696,10 @@ limitations under the License. xhr.onreadystatechange = function () { if (xhr.readyState === 4) { // process the response from the Web application - that._processLogoutResult(xhr, deferred); + try { + that._processLogoutResult(xhr, deferred); + } catch (e) { + } } }; @@ -14544,9 +14792,8 @@ limitations under the License. }()); //# sourceURL=progress.jsdo.js /* -progress.auth.sso.js Version: 6.0.1 -Copyright (c) 2016-2017 Progress Software Corporation and/or its subsidiaries or affiliates. +Copyright (c) 2016-2019 Progress Software Corporation and/or its subsidiaries or affiliates. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14903,7 +15150,10 @@ limitations under the License. xhr.onreadystatechange = function () { if (xhr.readyState === 4) { // process the response from the Web application - processRefreshResult(xhr, deferred); + try { + processRefreshResult(xhr, deferred); + } catch (e){ + } } }; @@ -15037,10 +15287,9 @@ limitations under the License. }()); -/* -progress.data.kendo.js Version: 6.0.1 +/* -Copyright (c) 2015-2018 Progress Software Corporation and/or its subsidiaries or affiliates. +Copyright (c) 2015-2019 Progress Software Corporation and/or its subsidiaries or affiliates. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/lib/progress.all.min.js b/lib/progress.all.min.js index 81f07f1..2840762 100644 --- a/lib/progress.all.min.js +++ b/lib/progress.all.min.js @@ -1,7 +1,5 @@ /* -Progress JSDO Version: 6.0.1 - -Copyright 2012-2018 Progress Software Corporation and/or its subsidiaries or affiliates. +Copyright 2012-2019 Progress Software Corporation and/or its subsidiaries or affiliates. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -15,5 +13,5 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -(function(){var isNativeScript=false,isNodeJS=false;var pkg_xmlhttprequest="xmlhttprequest",pkg_nodeLocalstorage="node-localstorage",pkg_nativescriptLocalstorage="nativescript-localstorage",pkg_fileSystemAccess="file-system/file-system-access",pkg_base64="base-64";if(typeof XMLHttpRequest==="undefined"){isNodeJS=true;try{XMLHttpRequest=require(""+pkg_xmlhttprequest).XMLHttpRequest}catch(e){console.error("Error: JSDO library requires XMLHttpRequest object in Node.js.\n"+"Please install xmlhttprequest package.")}}if(!isNodeJS&&(typeof localStorage==="undefined"||typeof sessionStorage==="undefined")){try{require(""+pkg_fileSystemAccess);isNativeScript=true}catch(exception1){isNativeScript=false}}if(isNativeScript){try{if(typeof sessionStorage==="undefined"){sessionStorage=require(""+pkg_nativescriptLocalstorage)}if(typeof localStorage==="undefined"){localStorage=require(""+pkg_nativescriptLocalstorage)}}catch(exception2){console.error("Error: JSDO library requires localStorage and sessionStorage objects in NativeScript.\n"+"Please install nativescript-localstorage package.")}try{if(typeof btoa==="undefined"){btoa=require(""+pkg_base64).encode}}catch(exception3){console.error("Error: JSDO library requires btoa() function in NativeScript.\n"+"Please install base-64 package.")}}if(isNodeJS){var LocalStorage;if(typeof localStorage==="undefined"){try{var module=require(""+pkg_nodeLocalstorage);LocalStorage=module.LocalStorage;localStorage=new LocalStorage("./scratch1")}catch(e){console.error("Error: JSDO library requires localStorage and sessionStorage objects in Node.js.\n"+"Please install node-localstorage package.")}}if(typeof sessionStorage==="undefined"&&typeof LocalStorage!=="undefined"){sessionStorage=new LocalStorage("./scratch2")}try{if(typeof btoa==="undefined"){btoa=require(""+pkg_base64).encode}}catch(exception3){console.error("Error: JSDO library requires btoa() function in Node.js.\n"+"Please install base-64 package.")}}})();(function(){if(typeof progress==="undefined"){progress={}}if(typeof progress.data==="undefined"){progress.data={}}progress.util={};var STRING_OBJECT_TYPE="String",DATE_OBJECT_TYPE="Date",CHARACTER_ABL_TYPE="CHARACTER";progress.util.Deferred=function(){function Deferred(){this._deferred={}}Deferred.prototype.promise=function(){var that=this;if(progress.util.Deferred.useJQueryPromises){if(typeof $!=="undefined"&&typeof $.Deferred==="function"){this._deferred._jQuerydeferred=$.Deferred();this._promise=this._deferred._jQuerydeferred.promise()}else{throw new Error("JQuery Promises not found in environment.")}}else{this._promise=new Promise(function(resolve,reject){that._deferred.resolve=resolve;that._deferred.reject=reject})}if(this._resolveArguments||this._rejectArguments){setTimeout(function(){if(that._resolveArguments){that.resolve.apply(that,that._resolveArguments)}else if(that._rejectArguments){that.reject.apply(that,that._rejectArguments)}},500)}return this._promise};Deferred.prototype.resolve=function(arg1,arg2,arg3){if(this._promise){if(this._deferred._jQuerydeferred){this._deferred._jQuerydeferred.resolve.apply(this,arguments)}else{var object=progress.util.Deferred.getParamObject1(arg1,arg2,arg3);this._deferred.resolve(object)}}else{this._resolveArguments=arguments}};Deferred.prototype.reject=function(arg1,arg2,arg3){if(this._promise){if(this._deferred._jQuerydeferred){this._deferred._jQuerydeferred.reject.apply(this,arguments)}else{var object=progress.util.Deferred.getParamObject1(arg1,arg2,arg3);this._deferred.reject(object)}}else{this._rejectArguments=arguments}};Deferred.useJQueryPromises=false;Deferred.when=function(deferreds){if(progress.util.Deferred.useJQueryPromises){return $.when.apply($,deferreds)}else{return Promise.all(deferreds)}};Deferred.getParamObject1=function(arg1,arg2,arg3){var object={},objectName;try{if(typeof arg1==="undefined"||arg1===null){object.result=arg2;object.info=arg3}else{if(arg1 instanceof progress.data.JSDOSession){objectName="jsdosession"}else if(arg1 instanceof progress.data.AuthenticationProvider){objectName="provider"}else if(arg1 instanceof progress.data.JSDO){objectName="jsdo"}else if(typeof arg1==="number"){objectName="result"}else{objectName=typeof arg1}object[objectName]=arg1;if(objectName==="jsdo"){object.success=arg2;if(arg3&&arg3.xhr){object.request=arg3}else if(arg3&&arg3.batch){object.request=arg3}else{object.info=arg3}}else{if(objectName==="result"){object.info=arg2;if(arg3){object.info2=arg3}}else{object.result=arg2;object.info=arg3}}}}catch(e){console.log("Error: Undetermined argument in getParamObject() call.")}return object};Deferred.getParamObject=function(arg1,arg2,arg3){var object={};if(progress.util.Deferred.useJQueryPromises){object=progress.util.Deferred.getParamObject1(arg1,arg2,arg3)}else{if(typeof arg1==="undefined"){object.result=arg2;object.info=arg3;arg1=object}return arg1}return object};return Deferred}();progress.util.Observable=function(){function _filterObservers(observers,fn,scope,operation){return observers.filter(function(el){if(el.fn!==fn||el.scope!==scope||el.operation!==operation){return el}},this)}this.validateSubscribe=function(args,evt,listenerData){if(args.length>=2&&typeof args[0]==="string"&&typeof args[1]==="string"){listenerData.operation=args[1];listenerData.fn=args[2];listenerData.scope=args[3]}else if(args.length>=2&&typeof args[0]==="string"&&typeof args[1]==="function"){listenerData.operation=undefined;listenerData.scope=args[2];listenerData.fn=args[1]}else{throw new Error}};this.subscribe=function(evt,operation,fn,scope){var listenerData,observers;if(!evt){throw new Error(progress.data._getMsgText("jsdoMSG037",this.toString(),"subscribe"))}if(typeof evt!=="string"){throw new Error(progress.data._getMsgText("jsdoMSG033",this.toString(),"subscribe",progress.data._getMsgText("jsdoMSG039")))}this._events=this._events||{};evt=evt.toLowerCase();listenerData={fn:undefined,scope:undefined,operation:undefined};try{this.validateSubscribe(arguments,evt,listenerData)}catch(e){throw new Error(progress.data._getMsgText("jsdoMSG033",this.toString(),"subscribe",e.message))}observers=this._events[evt]||[];observers=_filterObservers(observers,listenerData.fn,listenerData.scope,listenerData.operation);observers.push(listenerData);this._events[evt]=observers;return this};this.unsubscribe=function(evt,operation,fn,scope){var listenerData,observers;if(!evt){throw new Error(progress.data._getMsgText("jsdoMSG037",this.toString(),"unsubscribe"))}if(typeof evt!=="string"){throw new Error(progress.data._getMsgText("jsdoMSG033",this.toString(),"unsubscribe",progress.data._getMsgText("jsdoMSG037")))}this._events=this._events||{};evt=evt.toLowerCase();listenerData={fn:undefined,scope:undefined,operation:undefined};try{this.validateSubscribe(arguments,evt,listenerData)}catch(e){throw new Error(progress.data._getMsgText("jsdoMSG033",this.toString(),"unsubscribe",e.message))}observers=this._events[evt]||[];if(observers.length>0){this._events[evt]=_filterObservers(observers,listenerData.fn,listenerData.scope,listenerData.operation)}return this};this.trigger=function(evt,operation,args){var observers,op;if(!evt){throw new Error(progress.data._getMsgText("jsdoMSG037",this.toString(),"trigger"))}this._events=this._events||{};evt=evt.toLowerCase();observers=this._events[evt]||[];if(observers.length>0){args=Array.prototype.slice.call(arguments);if(arguments.length>=2&&typeof evt==="string"&&typeof operation==="string"){op=operation;args=args.length>2?args.slice(2):[]}else if(arguments.length>=1&&typeof evt==="string"){op=undefined;args=args.length>1?args.slice(1):[]}else{throw new Error(progress.data._getMsgText("jsdoMSG033",this.toString(),"trigger"))}observers.forEach(function(el){if(el.operation===op){el.fn.apply(el.scope,args)}})}return this};this.unsubscribeAll=function(evt,operation){var observers;if(evt){this._events=this._events||{};if(typeof evt==="string"){evt=evt.toLowerCase();observers=this._events[evt]||[];observers.forEach(function(el){if(el.operation){this.unsubscribe(evt,el.operation,el.fn,el.scope)}else{this.unsubscribe(evt,el.fn,el.scope)}},this)}}else{this._events={}}return this}};progress.data.LocalStorage=function LocalStorage(){if(typeof localStorage==="undefined"){throw new Error(progress.data._getMsgText("jsdoMSG126","progress.data.LocalStorage","localStorage"))}this.saveToLocalStorage=function(name,dataObj){localStorage.setItem(name,JSON.stringify(dataObj))};this.readFromLocalStorage=function(name){var jsonStr=localStorage.getItem(name),dataObj=null;if(jsonStr!==null){try{dataObj=JSON.parse(jsonStr)}catch(e){dataObj=null}}return dataObj};this.clearLocalStorage=function(name){localStorage.removeItem(name)}};progress.util._convertToABLWhereString=function(tableRef,filter){var result=[],logic=filter.logic||"and",idx,length,field,fieldInfo,type,format,operator,value,ablType,filters=filter.filters||[filter],whereOperators={eq:"=",neq:"<>",gt:">",gte:">=",lt:"<",lte:"<=",contains:"INDEX",doesnotcontain:"INDEX",endswith:"R-INDEX",startswith:"BEGINS",isnull:"ISNULL",isnotnull:"ISNOTNULL",isempty:"ISEMPTY",isnotempty:"ISNOTEMPTY"};for(idx=0,length=filters.length;idx 0"}else{format="{2} MATCHES '*{1}'"}}else{format="{2} {0} "+format}filter=progress.util._format(format,operator,value,field)}else if(operator&&value===undefined){if(filter.operator==="isempty"||filter.operator==="isnotempty"){ablType=tableRef._getABLType(field);if(ablType!==CHARACTER_ABL_TYPE){throw new Error("Error parsing filter object. The operator "+filter.operator+" requires a CHARACTER field")}if(filter.operator==="isempty"){format="{2} = ''"}else if(filter.operator==="isnotempty"){format="{2} <> ''"}}else{if(filter.operator==="isnull"){format="{2} = ?"}else if(filter.operator==="isnotnull"){format="{2} <> ?"}else{format="{2} {0} ?"}}filter=progress.util._format(format,operator,value,field)}}result.push(filter)}filter=result.join(" "+logic+" ");if(result.length>1){filter="("+filter+")"}return filter};progress.util._convertToSQLQueryString=function(tableRef,filter,addSelect){var result=[],logic=filter.logic||"and",idx,length,field,type,format,operator,value,fieldFormat,filters=filter.filters||[filter],filterStr,usingLike=true,whereOperators={eq:"=",neq:"!=",gt:">",gte:">=",lt:"<",lte:"<=",contains:"LIKE",doesnotcontain:"NOT LIKE",endswith:"LIKE",startswith:"LIKE",isnull:"ISNULL",isnotnull:"ISNOTNULL",isempty:"ISEMPTY",isnotempty:"ISNOTEMPTY"};if(typeof addSelect==="undefined"){addSelect=false}for(idx=0,length=filters.length;idx1){filterStr="("+filterStr+")"}if(addSelect===true){filterStr="SELECT * FROM "+tableRef._name+" WHERE "+filterStr}return filterStr};progress.util._getObjectType=function(value){return Object.prototype.toString.call(value).slice(8,-1)};progress.util._format=function(fmt){var values=arguments,formatRegExp=/\{(\d+)(:[^\}]+)?\}/g;return fmt.replace(formatRegExp,function(match,index,placeholderFormat){var value=values[parseInt(index,10)+1];return progress.util._toString(value,placeholderFormat?placeholderFormat.substring(1):"")})};progress.util._toString=function(value,fmt){var str;if(fmt){if(progress.util._getObjectType(value)==="Date"){return progress.util._formatDate(value,fmt)}}if(typeof value==="number"){str=value.toString()}else{str=value!==undefined?value:""}return str};progress.util._pad=function(number,digits){var zeros=["","0","00","000","0000"],end;number=String(number);digits=digits||2;end=digits-number.length;if(end){return zeros[digits].substring(0,end)+number}return number};progress.util._formatDate=function(date,format){var dateFormatRegExp=/dd|MM|yyyy|hh|mm|fff|FFF|ss|zzz|iso|"[^"]*"|'[^']*'/g;return format.replace(dateFormatRegExp,function(match){var minutes,result,sign;if(match==="dd"){result=progress.util._pad(date.getDate())}else if(match==="MM"){result=progress.util._pad(date.getMonth()+1)}else if(match==="yyyy"){result=progress.util._pad(date.getFullYear(),4)}else if(match==="hh"){result=progress.util._pad(date.getHours())}else if(match==="mm"){result=progress.util._pad(date.getMinutes())}else if(match==="ss"){result=progress.util._pad(date.getSeconds())}else if(match==="fff"){result=progress.util._pad(date.getMilliseconds(),3)}else if(match==="FFF"){result=String(date.getTime())}else if(match==="zzz"){minutes=date.getTimezoneOffset();sign=minutes<0;result=(sign?"+":"-")+minutes}else if(match==="iso"){result=date.toISOString()}return result!==undefined?result:match.slice(1,match.length-1)})};progress.util.jsdoSettingsProcessor=function jsdoSettingsProcessor(jsdoSettings){if(typeof jsdoSettings==="object"){if(jsdoSettings.authenticationModel===undefined||jsdoSettings.authenticationModel===""){jsdoSettings.authenticationModel="ANONYMOUS"}}}})();(function(){var PROGRESS_JSDO_PCT_MAX_EMPTY_BLOCKS=20,PROGRESS_JSDO_OP_STRING=["none","create","read","update","delete","submit"],PROGRESS_JSDO_ROW_STATE_STRING=["","created","","modified","deleted"];if(typeof progress==="undefined"){progress={}}if(typeof progress.data==="undefined"){progress.data={}}progress.data._nextid=0;progress.data._uidprefix=""+(Date.now?Date.now():(new Date).getTime());var UID_MAX_VALUE=999999999999999;progress.data._getNextId=function(){var uid=++progress.data._nextid;if(uid>=UID_MAX_VALUE){progress.data._nextid=uid=1;progress.data._uidprefix=""+(Date.now?Date.now():(new Date).getTime())}return progress.data._uidprefix+"-"+uid};var msg={};msg.msgs={};msg.msgs.jsdoMSG000="JSDO, Internal Error: {1}";msg.msgs.jsdoMSG001="JSDO: JSDO has multiple tables. Please use {1} at the table reference level.";msg.msgs.jsdoMSG002="JSDO: Working record for '{1}' is undefined.";msg.msgs.jsdoMSG003="JSDO: {1} function requires a function as a parameter.";msg.msgs.jsdoMSG004="JSDO: Unable to find resource '{1}' in the catalog.";msg.msgs.jsdoMSG005="JSDO: Data for table '{1}' was not specified in addRecords() call.";msg.msgs.jsdoMSG006="JSDO: Data for JSDO was not specified in addRecords() call.";msg.msgs.jsdoMSG007="JSDO: Test function in {1} must return a boolean.";msg.msgs.jsdoMSG008="JSDO: Invalid keyFields parameter in addRecords() call.";msg.msgs.jsdoMSG009="JSDO: KeyField '{1}' in addRecords() call was not found in the schema.";msg.msgs.jsdoMSG010="JSDO: Field '{1}' in relationship was not found in the schema.";msg.msgs.jsdoMSG011="UIHelper: JSDO has multiple tables. "+"Please use {1} at the table reference level.";msg.msgs.jsdoMSG012="UIHelper: Invalid {2} parameter in {1} call.";msg.msgs.jsdoMSG020="JSDO: tableName parameter must be a string in addRecords() call.";msg.msgs.jsdoMSG021="JSDO: addMode parameter must be specified in addRecords() call.";msg.msgs.jsdoMSG022="JSDO: Invalid addMode specified in addRecords() call.";msg.msgs.jsdoMSG023="JSDO: Duplicate found in addRecords() call using APPEND mode.";msg.msgs.jsdoMSG024="{1}: Unexpected signature in call to {2} function.";msg.msgs.jsdoMSG025="{1}: Invalid parameters in call to {2} function.";msg.msgs.jsdoMSG026="JSDO: saveChanges requires a "+"CREATE, UPDATE, DELETE or SUBMIT operation to be defined.";msg.msgs.jsdoMSG030="JSDO: Invalid {1}, expected {2}.";msg.msgs.jsdoMSG031="JSDO: Specified sort field name '{1}' was not found in the schema.";msg.msgs.jsdoMSG032="JSDO: Before-image data already exists for record in addRecords() call.";msg.msgs.jsdoMSG033="{1}: Invalid signature for {2}. {3}";msg.msgs.jsdoMSG034="JSDO: In '{1}' function, JSON data is missing _id";msg.msgs.jsdoMSG035="JSDO: In '{1}' function, before-image JSON data is missing prods:clientId";msg.msgs.jsdoMSG036="JSDO: '{1}' can only be called for a dataset";msg.msgs.jsdoMSG037="{1}: Event name must be provided for {2}.";msg.msgs.jsdoMSG038="Too few arguments. There must be at least {1}.";msg.msgs.jsdoMSG039="The name of the event is not a string.";msg.msgs.jsdoMSG040="The event listener is not a function.";msg.msgs.jsdoMSG041="The event listener scope is not an object.";msg.msgs.jsdoMSG042="'{1}' is not a defined event for this object.";msg.msgs.jsdoMSG043="{1}: A session object was requested to check the status of a Mobile "+"Service named '{2}', but it has not loaded the definition of that service.";msg.msgs.jsdoMSG044="JSDO: In '{1}' function, {2} is missing {3} property.";msg.msgs.jsdoMSG045="JSDO: {1} function: {2} is missing {3} property.";msg.msgs.jsdoMSG046="JSDO: {1} operation is not defined.";msg.msgs.jsdoMSG047="{1} timeout expired.";msg.msgs.jsdoMSG048="{1}: {2} method has argument '{3}' that is missing property '{4}'.";msg.msgs.jsdoMSG049="{1}: Unexpected error calling {2}: {3}";msg.msgs.jsdoMSG050="No token returned from server";msg.msgs.jsdoMSG051="{1} The login method was not executed because the AuthenticationProvider is already logged in.";msg.msgs.jsdoMSG052="{1}: The login method was not executed because no credentials were supplied.";msg.msgs.jsdoMSG053="{1}: {2} was not executed because the AuthenticationProvider is not logged in.";msg.msgs.jsdoMSG054="{1}: Token refresh was not executed because the AuthenticationProvider does not have a refresh token.";msg.msgs.jsdoMSG055="{1}: Token refresh was not executed because the authentication model is not sso.";msg.msgs.jsdoMSG056="{1}: Already logged in.";msg.msgs.jsdoMSG057="{1}: Cannot call {2} when authenticationModel is SSO. Please use the AuthenticationProvider object instead.";msg.msgs.jsdoMSG058="{1}: Cannot pass username and password to addCatalog when authenticationModel "+"is sso. Pass an AuthenticationProvider instead.";msg.msgs.jsdoMSG059="{1}: Error in constructor. The authenticationModels of the "+"AuthenticationProvider ({2}) and the JSDOSession ({3}) were not compatible.";msg.msgs.jsdoMSG060="AuthenticationProvider: AuthenticationProvider is no longer logged in. "+"Tried to refresh SSO token but failed due to authentication error at token server.";msg.msgs.jsdoMSG061="{1}: Attempted to set {2} property to an invalid value.";msg.msgs.jsdoMSG062="{1}: Cannot call {2} when an AuthenticationProvider is already available and logged in.";msg.msgs.jsdoMSG100="JSDO: Unexpected HTTP response. Too many records.";msg.msgs.jsdoMSG101="Network error while executing HTTP request.";msg.msgs.jsdoMSG110="Catalog error: idProperty not specified for resource '{1}'. "+"idProperty is required {2}.";msg.msgs.jsdoMSG111="Catalog error: Schema '{1}' was not found in catalog.";msg.msgs.jsdoMSG112="Catalog error: Output parameter '{1}' was not found for operation '{2}'.";msg.msgs.jsdoMSG113="Catalog error: Found xType '{1}' for output parameter '{2}' "+"for operation '{3}' but xType DATASET, TABLE or ARRAY was expected.";msg.msgs.jsdoMSG114="JSDO: idProperty '{1}' is missing from '{2}' record.";msg.msgs.jsdoMSG115="JSDO: Invalid option specified in {1}() call.";msg.msgs.jsdoMSG116="JSDO: {1} parameter must be a string in {2} call.";msg.msgs.jsdoMSG117="JSDO: Schema from storage area '{1}' does not match JSDO schema";msg.msgs.jsdoMSG118="JSDO: Plugin '{1}' was not found.";msg.msgs.jsdoMSG119="JSDO: A mappingType is expected when 'capabilities' is set."+" Please specify a plugin (ex: JFP).";msg.msgs.jsdoMSG120="JSDO: Parameter '{2}' requires capability '{1}' in the catalog.";msg.msgs.jsdoMSG121="{1}: Argument {2} must be of type {3} in {4} call.";msg.msgs.jsdoMSG122="{1}: Incorrect number of arguments in {2} call. There should be {3}.";msg.msgs.jsdoMSG123="{1}: A server response included an invalid '{2}' header.";msg.msgs.jsdoMSG124="JSDO: autoApplyChanges is not supported for saveChanges(true) "+"with a temp-table. Use jsdo.autoApplyChanges = false.";msg.msgs.jsdoMSG125="{1}: The AuthenticationProvider is not managing valid credentials.";msg.msgs.jsdoMSG126="{1}: No support for {2}.";msg.msgs.jsdoMSG127="JSDO: acceptRowChanges() cannot be called for record with _rejected === true.";msg.msgs.jsdoMSG500="{1}: '{2}' objects must contain a '{3}' property.";msg.msgs.jsdoMSG501="{1}: '{2}' in '{3}' function cannot be an empty string.";msg.msgs.jsdoMSG502="{1}: The '{2}' parameter passed to the '{3}' function has an invalid value for "+"its '{4}' property.";msg.msgs.jsdoMSG503="{1}: '{2}' must be of type '{3}'.";msg.msgs.jsdoMSG504="{1}: {2} has an invalid value for the '{3}' property.";msg.msgs.jsdoMSG505="{1}: '{2}' objects must have a '{3}' method.";msg.msgs.jsdoMSG506="{1}: Invalid argument for the {2} parameter in {3} call.";msg.msgs.jsdoMSG507="{1}: '{2}' is an invalid value for the {3} parameter in {4} call.";msg.msgs.jsdoMSG508="JSDOSession: If a JSDOSession object is using the SSO authentication model, "+"the options object passed to its constructor must include an authProvider property.";msg.msgs.jsdoMSG509="progress.data.getSession: If the authenticationModel is AUTH_TYPE_SSO, "+"authenticationURI and authProviderAuthenticationModel are required parameters.";msg.msgs.jsdoMSG510="{1}: This session has been invalidated and cannot be used.";msg.msgs.jsdoMSG511="JSDOSession: addCatalog() can only be called if an AuthenticationProvider was passed as an argument or "+"connect() has been successfully called.";msg.msgs.jsdoMSG512="JSDOSession: Error while loading multiple catalogs.";msg.msgs.jsdoMSG998="JSDO: JSON object in addRecords() must be DataSet or Temp-Table data.";msg.getMsgText=function(n,args){var text=msg.msgs[n],i;if(!text){throw new Error("Message text was not found by getMsgText()")}for(i=1;i=PROGRESS_JSDO_PCT_MAX_EMPTY_BLOCKS)this._needCompaction=true;data=newDataArray}else{if(params&&(params.sort||params.top)){newDataArray=[];for(i=0;i0){sortObject.tableRef=this;data.sort(this._getCompareFn(sortObject))}}if(params.top){if(typeof params.skip=="undefined"){params.skip=0}data=data.splice(params.skip,params.top)}}return data};this._recToDataObject=function(record,includeChildren){var array=[record];var dataObject=array;if(typeof includeChildren=="undefined"){includeChildren=false}if(this._jsdo._dataSetName){dataObject={};dataObject[this._jsdo._dataSetName]={};dataObject[this._jsdo._dataSetName][this._name]=array;if(includeChildren&&this._children.length>0){var jsrecord=this._findById(record._id,false);if(jsrecord){for(var i=0;i0){for(var j=0;j0){for(var i=0;i=PROGRESS_JSDO_PCT_MAX_EMPTY_BLOCKS)this._needCompaction=true};this._equalRecord=function(rec1,rec2,keyFields){var field;var match=true;for(var i=0;ivalue2||(value1===undefined||value1===null))return sortAscending[i]?1:-1;else if(value10)this._sort(sortObject)}else{this._sort(arg1)}this._createIndex()};this._sort=function(arg1){if(arguments.length===0&&(!this.autoSort||this._sortFn===undefined&&this._sortObject.sortFields===undefined))return;if(arguments.length===0){if(this._sortFn){this._data.sort(this._sortFn)}else{this._data.sort(this._compareFields)}this._needsAutoSorting=false}else{if(typeof arg1=="function"){this._data.sort(this._getCompareFn(arg1))}else{arg1.tableRef=this;this._data.sort(this._getCompareFn(arg1))}if(this.autoSort)this._needsAutoSorting=true}};this.addRecords=function(jsonObject,addMode,keyFields,trackChanges,isInvoke){this._jsdo._addRecords(this._name,jsonObject,addMode,keyFields,trackChanges,isInvoke)};this.acceptChanges=function(){var tableRef=this;for(var id in tableRef._beforeImage){if(tableRef._beforeImage[id]===null){var jsrecord=tableRef._findById(id,false);if(jsrecord!==null){tableRef._jsdo._deleteProdsProperties(jsrecord.data,true)}}else if(this._changed[id]!==undefined){var jsrecord=this._findById(id,false);if(jsrecord!==null){tableRef._jsdo._deleteProdsProperties(jsrecord.data,true)}}}tableRef._processed={};tableRef._added=[];tableRef._changed={};tableRef._deleted=[];tableRef._beforeImage={}};this.rejectChanges=function(){for(var id in this._beforeImage){if(this._beforeImage[id]===null){this._jsdo._undoCreate(this,id)}else if(this._changed[id]!==undefined){this._jsdo._undoUpdate(this,id,true)}else{this._jsdo._undoDelete(this,id,true)}}var tableRef=this;tableRef._processed={};tableRef._added=[];tableRef._changed={};tableRef._deleted=[]};this.hasChanges=function(){return Object.keys(this._beforeImage).length!==0};this.getChanges=function(){var result=[];for(var id in this._beforeImage){var item={rowState:"",record:null};if(this._beforeImage[id]===null){item.rowState=PROGRESS_JSDO_ROW_STATE_STRING[progress.data.JSDO._OP_CREATE];item.record=this._findById(id,false)}else if(this._changed[id]!==undefined){item.rowState=PROGRESS_JSDO_ROW_STATE_STRING[progress.data.JSDO._OP_UPDATE];item.record=this._findById(id,false)}else{item.rowState=PROGRESS_JSDO_ROW_STATE_STRING[progress.data.JSDO._OP_DELETE];item.record=new progress.data.JSRecord(this,this._beforeImage[id])}result.push(item)}return result};this._clearErrorStrings=function(){var record=null;for(var id in this._beforeImage){if(this._beforeImage[id]===null){record=this._findById(id,false);if(record){delete record.data._errorString}}else{record=this._findById(id,false);if(record){delete record.data._errorString}else{delete this._beforeImage[id]._errorString}}}};this._applyChanges=function(){var i;for(var id in this._beforeImage){if(this._beforeImage[id]===null){var jsrecord=this._findById(id,false);if(jsrecord===null&&this._jsdo._resource.idProperty!==undefined){if(this._tmpIndex[id]){var record=this._data[this._tmpIndex[id].index];jsrecord=record?new progress.data.JSRecord(this,record):null;delete this._tmpIndex[id]}}if(jsrecord!==null){if(jsrecord.data._rejected||jsrecord.data._errorString!==undefined){this._jsdo._undoCreate(this,id)}else{jsrecord.acceptRowChanges()}}else{var found=false;for(var i=0;i0){for(var i=0;iindex){i--}if(i!=index){this._tableRef._data.splice(index,1);this._tableRef._data.splice(i,0,record);this._tableRef._createIndex()}}}};this.assign=function(record){if(record===undefined)throw new Error(msg.getMsgText("jsdoMSG024","JSDO","assign() or update()"));this._saveBeforeImageUpdate();var fieldName,i,j,value,schema=this._tableRef.getSchema(),prefixElement,name;if(record){for(i=0;i0&&!this._fields[fieldName.toLowerCase()]){name=fieldName.substring(0,index);element=fieldName.substring(index+progress.data.JSDO.ARRAY_INDEX_SEPARATOR.length);fieldInfo=this._fields[name.toLowerCase()];if(!isNaN(element)&&fieldInfo&&fieldInfo.type==="array"){return this.record.data[name][element-1]}}return this.record.data[fieldName]}else return null},set:function(value){var name=fieldName,index,element,fieldInfo;if(this.record){this.record._saveBeforeImageUpdate();try{index=fieldName.indexOf(progress.data.JSDO.ARRAY_INDEX_SEPARATOR);if(index>0&&!this._fields[fieldName.toLowerCase()]){name=fieldName.substring(0,index);element=fieldName.substring(index+progress.data.JSDO.ARRAY_INDEX_SEPARATOR.length);fieldInfo=this._fields[name.toLowerCase()];if(!isNaN(element)&&fieldInfo&&fieldInfo.type==="array"){this.record.data[name][element-1]=value;return}}this.record.data[fieldName]=value}finally{this.record._sortRecord(name)}}},enumerable:true,writeable:true})};Object.defineProperty(this,"hasSubmitOperation",{get:function(){return this._hasSubmitOperation},enumerable:true});Object.defineProperty(this,"hasCUDOperations",{get:function(){return this._hasCUDOperations},enumerable:true});Object.defineProperty(this,"defaultTableRef",{get:function(){return this._defaultTableRef},enumerable:true});this._buffers={};this._numBuffers=0;this._defaultTableRef=null;this._async=true;this._dataProperty=null;this._dataSetName=null;this.operations=[];this.useRelationships=true;this._session=null;this._needCompaction=false;this._hasCUDOperations=false;this._hasSubmitOperation=false;this._useSubmit=false;this.autoApplyChanges=true;this._lastErrors=[];this._localStorage=null;this._convertForServer;this._fillMergeMode;var autoFill=false;if(!arguments[0]){throw new Error("JSDO: Parameters are required in constructor.")}if(typeof arguments[0]=="string"){this.name=arguments[0]}else if(typeof arguments[0]=="object"){var args=arguments[0];for(var v in args){switch(v){case"autoFill":autoFill=args[v];break;case"events":this._events={};for(var eventName in args[v]){this._events[eventName.toLowerCase()]=args[v][eventName]}break;case"dataProperty":this._dataProperty=args[v];break;default:this[v]=args[v]}}}if(!this.name){throw new Error("JSDO: JSDO constructor is missing the value for 'name'")}if(this._events){if(typeof this._events!=="object"){throw new Error("JSDO: JSDO constructor event object is not defined as an object")}for(var prop in this._events){var evt=this._events[prop];if(!(evt instanceof Array)){throw new Error("JSDO: JSDO constructor event object for "+prop+" must be an array")}evt.forEach(function(el){if(typeof el!=="object"){throw new Error("JSDO: JSDO constuctor event object for "+prop+" is not defined as an object")}if(typeof el.fn!=="function"){throw new Error("JSDO: JSDO event listener for "+prop+" is not a function.")}if(el.scope&&typeof el.scope!=="object"){throw new Error("JSDO: JSDO event listener scope for "+prop+" is not an object.")}})}}if(this.name){this._resource=progress.data.ServicesManager.getResource(this.name);if(this._resource){if(!this.url)this.url=this._resource.url;if(!this._dataSetName&&this._resource._dataSetName){this._dataSetName=this._resource._dataSetName;if(this._resource.dataProperty){var buffer=this[this._resource.dataProperty]=new progress.data.JSTableRef(this,this._resource.dataProperty);this._buffers[this._resource.dataProperty]=buffer}else{for(var tableName in this._resource.fields){var buffer=this[tableName]=new progress.data.JSTableRef(this,tableName);this._buffers[tableName]=buffer}}}if(!this._dataProperty&&this._resource.dataProperty)this._dataProperty=this._resource.dataProperty;if(!this._dataSetName){var tableName=this._dataProperty?this._dataProperty:"";this._buffers[tableName]=new progress.data.JSTableRef(this,tableName);if(tableName)this[tableName]=this._buffers[tableName]}var properties,tableName;if(this._dataSetName&&this._resource.schema&&this._resource.schema.properties[this._dataSetName]){properties=this._resource.schema.properties[this._dataSetName].properties;if(Object.keys(properties).length===1){tableName=Object.keys(properties)[0];if(properties[tableName].idProperty){this._resource.idProperty=properties[tableName].idProperty}}}else if(this._resource.schema&&this._resource.schema.properties&&this._resource.schema.properties[tableName]&&this._resource.schema.properties[tableName].idProperty){this._resource.idProperty=this._resource.schema.properties[tableName].idProperty}for(var fnName in this._resource.fn){this[fnName]=this._resource.fn[fnName]["function"]}this._hasCUDOperations=this._resource.generic["create"]!==undefined||this._resource.generic["update"]!==undefined||this._resource.generic["delete"]!==undefined;this._hasSubmitOperation=this._resource.generic["submit"]!==undefined;if(!this._session){var myservice=progress.data.ServicesManager.getService(this._resource.service.name);this._session=myservice._session;this._session._pushJSDOs(this)}}else{throw new Error(msg.getMsgText("jsdoMSG004",this.name))}}else{this._buffers[""]=new progress.data.JSTableRef(this,"")}if(!this._session){throw new Error("JSDO: Unable to get user session for resource '"+this.name+"'")}for(var buf in this._buffers){this._buffers[buf]._parent=null;this._buffers[buf]._children=[];this._buffers[buf]._relationship=null;this._buffers[buf]._isNested=false;if(!this._defaultTableRef)this._defaultTableRef=this._buffers[buf];this._numBuffers++}if(this._numBuffers!=1)this._defaultTableRef=null;else{this.record=null}if(typeof Object.defineProperty=="function"){this._caseSensitive=false;Object.defineProperty(this,"caseSensitive",{get:function(){return this._caseSensitive},set:function(value){this._caseSensitive=value?true:false;for(var buf in this._buffers){this._buffers[buf].caseSensitive=this._caseSensitive}},enumerable:true,writeable:true});this._autoSort=true;Object.defineProperty(this,"autoSort",{get:function(){return this._autoSort},set:function(value){this._autoSort=value?true:false;for(var buf in this._buffers){this._buffers[buf].autoSort=this._autoSort}},enumerable:true,writeable:true})}this._properties={};if(typeof Object.defineProperty=="function"){Object.defineProperty(this,"this._properties",{get:function(){return this._properties},enumerable:false})}if(this._resource&&this._resource.fields){for(var buf in this._buffers){this._buffers[buf]._schema=this._resource.fields[buf];this._buffers[buf]._primaryKeys=this._resource.primaryKeys[buf];this._buffers[buf]._fields={};var fields=this._buffers[buf]._schema;for(var i=0;i1){for(var buf in this._buffers){var fields=[];var found=false;for(var i=0;i=0?index+1:"");element.value=value?value[index]:undefined;return element};this.isDataSet=function(){return this._dataSetName?true:false};this._invokeComplete=function(jsdo,success,request){if(request.async&&request.fnName){jsdo.trigger("afterInvoke",request.fnName,jsdo,success,request)}if(request.deferred){if(success){request.deferred.resolve(jsdo,success,request)}else{request.deferred.reject(jsdo,success,request)}}};this._invokeSuccess=function(){};this._invokeError=function(){};this._httpRequest=function(xhr,method,url,reqBody,request){function afterOpenRequest(){var input=null;if(reqBody){xhr.setRequestHeader("Content-Type","application/json; charset=utf-8");input=JSON.stringify(reqBody)}try{xhr.send(input)}catch(e){request.success=false;request.exception=e;xhr.jsdo._session._checkServiceResponse(xhr,request.success,request)}}if(!xhr){xhr=new XMLHttpRequest;xhr.onCompleteFn=this._invokeComplete;xhr.onSuccessFn=this._invokeSuccess;xhr.onErrorFn=this._invokeError;xhr.onreadystatechange=this.onReadyStateChangeGeneric;if(request.async&&request.fnName){this.trigger("beforeInvoke",request.fnName,this,request)}if(reqBody){if(this._resource&&this._resource.service){var useRequest=this._resource.service.useRequest;if(this._resource.service.settings&&this._resource.service.settings.useRequest!==undefined){useRequest=this._resource.service.settings.useRequest}if(useRequest){reqBody={request:reqBody}}}}}xhr.request=request;xhr.jsdo=this;request.jsdo=this;request.xhr=xhr;this._session._openRequest(xhr,method,url,request.async,afterOpenRequest);return request};this._getDataObject=function(){var dataObject={};if(this._dataSetName){dataObject[this._dataSetName]={};var oldUseRelationships=this.useRelationships;try{this.useRelationships=false;for(var buf in this._buffers){dataObject[this._dataSetName][buf]=this._buffers[buf].getData()}}finally{this.useRelationships=oldUseRelationships}}else{if(this._dataProperty){dataObject[this._dataProperty]=this.getData()}else return this.getData()}return dataObject};this._getDataObjectAsNested=function(){var dataObject={};if(this._dataSetName){dataObject[this._dataSetName]={};try{for(var buf in this._buffers){var bufObj=this._buffers[buf];if(bufObj._isNested)continue;this._nestChildren=false;if(bufObj._children.length>0){for(var i=0;i0){hasErrors=true}}if(hasErrors){this._allRecordsRejected=true;this._someRecordsRejected=true;for(i=0;i0){this._allRecordsRejected=true;this._someRecordsRejected=false;hasCommittedRecords=false;for(i=0;i0&&!param.operations[0].success){this._allRecordsRejected=true;this._someRecordsRejected=true;for(i=0;i0){this._convertForServer=true;this._buffers[buf]._convertForServer=true}}};this._convertRequestData=function(objParam){var buf,beforeData;if(this._convertForServer===false){return}for(buf in this._buffers){if(this._buffers[buf]._convertForServer){if(objParam[this._dataSetName]){if(objParam[this._dataSetName][buf]){this._convertTableData(this._buffers[buf],objParam[this._dataSetName][buf])}beforeData=objParam[this._dataSetName]["prods:before"];if(beforeData&&beforeData[buf]){this._convertTableData(this._buffers[buf],beforeData[buf])}}else if(objParam[buf]){this._convertTableData(this._buffers[buf],objParam[buf])}}}};this._convertTableData=function(tableRef,tableData){var i;for(i=0;i0){this._confirmOperationExists(progress.data.JSDO._OP_DELETE);checkedDelete=true}if(!checkedCreate&&tableRef._added.length>0){this._confirmOperationExists(progress.data.JSDO._OP_CREATE);checkedCreate=true}if(!checkedUpdate&&Object.keys(tableRef._changed).length>0){this._confirmOperationExists(progress.data.JSDO._OP_UPDATE);checkedUpdate=true}if(checkedDelete&&checkedCreate&&checkedUpdate){break}}};this._confirmOperationExists=function(operation){var operationStr=PROGRESS_JSDO_OP_STRING[operation];if(typeof this._resource.generic[operationStr]!=="function"){throw new Error(msg.getMsgText("jsdoMSG046",operationStr.toUpperCase()))}};this.invoke=function(name,object){var deferred,promise;try{var request=this[name](object);if(request.deferred){deferred=request.deferred;promise=request.deferred.promise()}}catch(error){if(progress.util.Deferred.useJQueryPromises){throw error}else{if(!deferred){deferred=new progress.util.Deferred;promise=deferred.promise()}deferred.reject(this,false,{errorObject:error})}}return promise};this._syncTableRef=function(operation,tableRef,batch){var rowData,requestData,jsonObject,dataSetObject;if(tableRef._visited)return;tableRef._visited=true;if(!batch){batch={operations:[]}}else if(!batch.operations){batch.operations=[]}switch(operation){case progress.data.JSDO._OP_CREATE:for(var i=0;i0&&!dataSetJsonObject[tableRef._name])dataSetJsonObject[tableRef._name]=[];for(var i=0;i0||tableRef._added.length>0||hasUpdates){hasChanges=true;break}}return hasChanges};this._addDeletesToChangeSet=function(tableRef,dataSetJsonObject,request){for(var i=0;i=10){tmpIndex={};for(var i=0;ivalue2||value1===null)return false;else if(value11){for(var buf in this._buffers){if(this._buffers[buf]._isNested&&this._buffers[buf]._parent&&this._buffers[this._buffers[buf]._parent]){var srcData=this._buffers[this._buffers[buf]._parent]._data;var data=[];for(var i=0;i1){xhr.request.success=false;throw new Error(msg.getMsgText("jsdoMSG100"))}for(var i=0;i1){xhr.request.success=false;throw new Error(msg.getMsgText("jsdoMSG100"))}for(var i=0;i1){xhr.request.success=false;throw new Error(msg.getMsgText("jsdoMSG100"))}var recordId=beforeTableJsonObject[0]["prods:clientId"];if(!recordId){throw new Error(msg.getMsgText("jsdoMSG035","_checkForDeleteError()"))}if(beforeTableJsonObject[0]["prods:hasErrors"]){var prods_id=beforeTableJsonObject[0]["prods:id"];var errorString=this._getErrorStringFromJsonObject(dataSetJsonObject,tableRef,prods_id);this._setErrorString(tableRef,recordId,errorString,true);hasError=true}}return hasError};this._mergeUpdateForSubmit=function(jsonObject,xhr){var errorString;if(!this._dataSetName){throw new Error(msg.getMsgText("jsdoMSG036","_mergeUpdateForSubmit()"))}var dataSetJsonObject=jsonObject[this._dataSetName];if(dataSetJsonObject[this._dataSetName])dataSetJsonObject=dataSetJsonObject[this._dataSetName];var beforeJsonObject=dataSetJsonObject["prods:before"];for(var buf in this._buffers){var tableRef=this._buffers[buf];var tableJsonObject=dataSetJsonObject[tableRef._name];if(tableJsonObject instanceof Array){for(var i=0;i1){request.success=false;throw new Error(msg.getMsgText("jsdoMSG100"))}}if(beforeJsonObject){hasError=jsdo._checkForDeleteError(dataSetJsonObject,xhr)}if(hasError)request.success=false;if(jsdo.autoApplyChanges){if(!hasError){delete request.jsrecord._tableRef._beforeImage[request.jsrecord.data._id]}else{jsdo._deleteError(jsdo,success,request)}}};this._deleteError=function(jsdo,success,request){if(jsdo.autoApplyChanges){jsdo._undoDelete(request.jsrecord._tableRef,request.jsrecord.data._id)}};this._createComplete=function(jsdo,success,request){var xhr=request.xhr;var jsrecord=request.jsrecord;try{jsdo._deleteProdsProperties(jsrecord.data,false);jsrecord._tableRef.trigger("afterCreate",jsdo,jsrecord,request.success,request);jsdo.trigger("afterCreate",jsdo,jsrecord,request.success,request)}finally{request.complete=true;jsdo._checkSaveComplete(xhr)}};this._createSuccess=function(jsdo,success,request){var xhr=request.xhr;var record=request.response;var hasError=jsdo._mergeUpdateForCUD(record,xhr);if(hasError)request.success=false;if(jsdo.autoApplyChanges){if(!hasError){delete request.jsrecord._tableRef._beforeImage[request.jsrecord.data._id]}else{jsdo._createError(jsdo,success,request)}}};this._createError=function(jsdo,success,request){if(jsdo.autoApplyChanges){jsdo._undoCreate(request.jsrecord._tableRef,request.jsrecord.data._id)}};this._updateComplete=function(jsdo,success,request){var xhr=request.xhr;var jsrecord=request.jsrecord;try{jsdo._deleteProdsProperties(jsrecord.data,false);jsrecord._tableRef.trigger("afterUpdate",jsdo,jsrecord,request.success,request);jsdo.trigger("afterUpdate",jsdo,jsrecord,request.success,request)}finally{request.complete=true;jsdo._checkSaveComplete(xhr)}};this._updateSuccess=function(jsdo,success,request){var xhr=request.xhr;var hasError=jsdo._mergeUpdateForCUD(request.response,xhr);if(hasError){request.success=false}if(jsdo.autoApplyChanges){if(!hasError){request.success=true;delete request.jsrecord._tableRef._beforeImage[request.jsrecord.data._id]}else{jsdo._updateError(jsdo,success,request)}}};this._updateError=function(jsdo,success,request){if(jsdo.autoApplyChanges){request.success=false;jsdo._undoUpdate(request.jsrecord._tableRef,request.jsrecord.data._id)}};this._saveChangesSuccess=function(jsdo,success,request){var records=request.response;jsdo._mergeUpdateForSubmit(records,request.xhr);jsdo._clearErrors();var changes=jsdo.getChanges();jsdo._updateLastErrors(jsdo,null,changes);jsdo._setAllRecordsRejected(changes);if(jsdo.autoApplyChanges){jsdo._applyChanges()}};this._saveChangesError=function(jsdo,success,request){jsdo._setAllRecordsRejected(true);if(jsdo.autoApplyChanges){jsdo.rejectChanges()}jsdo._updateLastErrors(jsdo,null,null,request)};this._saveChangesSuccessTT=function(jsdo,success,request){var changes;jsdo._clearErrors();changes=jsdo.getChanges();jsdo._updateLastErrors(jsdo,null,changes);jsdo._setAllRecordsRejected(false)};this._saveChangesComplete=function(jsdo,success,request){if(request.xhr.status>=200&&request.xhr.status<300&&(jsdo._lastErrors.length>0||jsdo._someRecordsRejected)){request.success=false}if(jsdo._useSubmit===true){jsdo._fireCUDTriggersForSubmit(request)}jsdo._undefWorkingRecord();jsdo._fireAfterSaveChanges(request.success,request)};this._fireAfterSaveChanges=function(success,request){this.trigger("afterSaveChanges",this,success,request);if(request.jsrecords){if(request.deferred){if(success){request.deferred.resolve(this,success,request)}else{request.deferred.reject(this,success,request)}}}else if(request.batch&&request.batch.deferred){if(success){request.batch.deferred.resolve(this,success,request)}else{request.batch.deferred.reject(this,success,request)}}var clearErrorString=this.autoApplyChanges;if(request.jsrecords){for(var idx=0;idx=400&&request.xhr.status<600){try{var responseObject=JSON.parse(request.xhr.responseText);if(responseObject instanceof Array){errorArray=responseObject}else if(responseObject instanceof Object){errorArray.push(responseObject)}for(i=0;i=400&&request.xhr.status<600)){errors.push({type:progress.data.JSDO.ERROR,error:"Error: HTTP Status "+request.xhr.status+" "+request.xhr.statusText,responseText:request.xhr.responseText})}}return errors};this._updateLastErrors=function(jsdo,batch,changes,request){var errors,errorText,responseObject,i,j,buf;if(batch){if(batch.operations===undefined)return;for(i=0;i=200&&request.xhr.status<300){jsdo._lastErrors.push({errorString:request.jsrecord.data._errorString});jsdo._buffers[request.jsrecord._tableRef._name]._lastErrors.push({type:progress.data.JSDO.DATA_ERROR,id:request.jsrecord.data._id,error:request.jsrecord.data._errorString})}else{errors=this._getErrorsFromRequest(request);errorText="";for(j=0;j1&&errors[j].error.indexOf("(7243)")!=-1){continue}if(request.jsrecord&&(errors[j].type===progress.data.JSDO.APP_ERROR||errors[j].type===progress.data.JSDO.RETVAL)){errors[j].id=request.jsrecord.data._id;request.jsrecord._tableRef._lastErrors.push(errors[j])}if(errorText.length===0){errorText=errors[j].error}else{errorText+="\n"+errors[j].error}}jsdo._lastErrors.push({errorString:errorText})}}}}else if(changes instanceof Array){for(i=0;i=400&&request.xhr.status<600||request.xhr.status===0)){errors=this._getErrorsFromRequest(request);errorText="";for(j=0;j1&&errors[j].error.indexOf("(7243)")!=-1){continue}for(buf in this._buffers){this._buffers[buf]._lastErrors.push(errors[j])}if(errorText.length===0){errorText=errors[j].error}else{errorText+="\n"+errors[j].error}}jsdo._lastErrors.push({errorString:errorText})}};this._checkSaveComplete=function(xhr){if(xhr.request){var jsdo=xhr.request.jsdo;var batch=xhr.request.batch;if(jsdo&&batch&&jsdo._async){if(jsdo._isBatchComplete(batch)){var success=jsdo._isBatchSuccess(batch);var request={batch:batch,success:success};jsdo._undefWorkingRecord();jsdo._lastErrors=[];if(!success&&batch.operations){jsdo._updateLastErrors(jsdo,batch,null)}this._setAllRecordsRejected(batch);jsdo._fireAfterSaveChanges(success,request)}}}};this._isBatchSuccess=function(batch){if(batch.operations){for(var i=0;i=200&&xhr.status<300||xhr.status===0&&xhr.responseText!==""){request.success=true;xhr.jsdo._session._saveClientContextId(xhr);if(typeof xhr.onSuccessFn=="function"){var operation;if(xhr.request.fnName!==undefined&&xhr.jsdo._resource.fn[xhr.request.fnName]!==undefined){operation=xhr.jsdo._resource.fn[xhr.request.fnName].operation}else operation=null;if(operation===undefined||operation!==null&&operation.mergeMode)xhr.jsdo._mergeInvoke(request.response,xhr);if(request.success)xhr.onSuccessFn(xhr.jsdo,request.success,request);else if(typeof xhr.onErrorFn=="function")xhr.onErrorFn(xhr.jsdo,request.success,request)}}else{request.success=false;if(xhr.status===0){request.exception=new Error(msg.getMsgText("jsdoMSG101"))}if(typeof xhr.onErrorFn=="function"){xhr.onErrorFn(xhr.jsdo,request.success,request)}}}catch(e){request.success=false;request.exception=e;if(typeof xhr.onErrorFn=="function"){xhr.onErrorFn(xhr.jsdo,request.success,request)}}xhr.jsdo._session._checkServiceResponse(xhr,request.success,request);if(typeof xhr.onCompleteFn=="function"){xhr.onCompleteFn(xhr.jsdo,request.success,request)}}};this.acceptChanges=function(){for(var buf in this._buffers){this._buffers[this._buffers[buf]._name].acceptChanges()}};this.rejectChanges=function(){for(var buf in this._buffers){this._buffers[this._buffers[buf]._name].rejectChanges()}};this.getChanges=function(){var result=[];for(var buf in this._buffers){var changes=this._buffers[this._buffers[buf]._name].getChanges();result=result.concat(changes)}return result};this.hasChanges=function(){for(var buf in this._buffers){if(this._buffers[this._buffers[buf]._name].hasChanges())return true}return false};this._applyChanges=function(){for(var buf in this._buffers){this._buffers[this._buffers[buf]._name]._applyChanges()}};this.acceptRowChanges=function(){if(this._defaultTableRef)return this._defaultTableRef.acceptRowChanges();throw new Error(msg.getMsgText("jsdoMSG001","acceptRowChanges()"))};this.rejectRowChanges=function(){if(this._defaultTableRef)return this._defaultTableRef.rejectRowChanges();throw new Error(msg.getMsgText("jsdoMSG001","rejectRowChanges()"))};this.setProperties=function(propertiesObject){var prop;if(arguments.length<1){throw new Error(progress.data._getMsgText("jsdoMSG122","JSDO","setProperties",1))}if(arguments.length>1){throw new Error(progress.data._getMsgText("jsdoMSG122","JSDO","setProperties",1))}if(typeof propertiesObject=="object"){this._properties={};for(prop in propertiesObject){if(propertiesObject.hasOwnProperty(prop)){if(typeof propertiesObject[prop]!=="function"){this._properties[prop]=propertiesObject[prop]}}}}else if(propertiesObject===undefined||propertiesObject===null){this._properties={}}else{throw new Error(progress.data._getMsgText("jsdoMSG121","JSDO",1,"Object","setProperties"))}};this.setProperty=function(propertyName,propertyValue){if(arguments.length<2){throw new Error(progress.data._getMsgText("jsdoMSG122","JSDO","setProperty",2))}if(arguments.length!==2){throw new Error(progress.data._getMsgText("jsdoMSG122","JSDO","setProperty",2))}if(typeof propertyName!=="string"){throw new Error(progress.data._getMsgText("jsdoMSG121","JSDO",1,"string","setProperty"))}if(propertyValue===undefined){delete this._properties[propertyName]}else{this._properties[propertyName]=propertyValue}};this.getProperties=function(){if(arguments.length>0){throw new Error(progress.data._getMsgText("jsdoMSG122","JSDO","getProperties",0))}return this._properties};this.getProperty=function(propertyName){if(arguments.length<1){throw new Error(progress.data._getMsgText("jsdoMSG122","JSDO","getProperty",1))}if(arguments.length>1){throw new Error(progress.data._getMsgText("jsdoMSG122","JSDO","getProperty",1))}return this._properties[propertyName]};this.saveLocal=function saveLocal(arg1,arg2){var name;var dataMode;if(arguments.length>2){throw new Error(msg.getMsgText("jsdoMSG024","JSDO",arguments.callee.name+"()"))}if(typeof arg1=="string"||arg1===null||arg1===undefined){name=arg1;dataMode=arg2}else{name=null;dataMode=arg1}if(name===undefined||name===null||name===""){name="jsdo_"+this._resource.service.name+"_"+this._resource.name}if(typeof dataMode=="undefined"){dataMode=progress.data.JSDO.ALL_DATA}else{switch(dataMode){case progress.data.JSDO.ALL_DATA:case progress.data.JSDO.CHANGES_ONLY:break;default:throw new Error(msg.getMsgText("jsdoMSG115",arguments.callee.name))}}if(this._localStorage===null){this._localStorage=new progress.data.LocalStorage}var dataObj=this._prepareDataObjectForLocalStorage(dataMode);this._localStorage.saveToLocalStorage(name,dataObj)};this.readLocal=function readLocal(name){if(arguments.length>1){throw new Error(msg.getMsgText("jsdoMSG024","JSDO",arguments.callee.name+"()"))}if(name===undefined||name===null||name===""){name="jsdo_"+this._resource.service.name+"_"+this._resource.name}else if(typeof name!="string"){throw new Error(msg.getMsgText("jsdoMSG116","name",arguments.callee.name+"()"))}if(this._localStorage===null){this._localStorage=new progress.data.LocalStorage}var object=this._localStorage.readFromLocalStorage(name);if(object){if(this._hasMatchingSchema(object)===false)throw new Error(msg.getMsgText("jsdoMSG117",name));this._restoreFromLocalStorage(object,progress.data.JSDO.MODE_EMPTY)}return object!==null};this.addLocalRecords=function addLocalRecords(arg1,arg2,arg3){var name;var addMode;var keyFields;if(arguments.length<1){throw new Error(msg.getMsgText("jsdoMSG024","JSDO",arguments.callee.name+"()"))}if(typeof arg1=="string"){name=arg1;addMode=arg2;keyFields=arg3}else{name="jsdo_"+this._resource.service.name+"_"+this._resource.name;addMode=arg1;keyFields=arg2}if(typeof name=="undefined"||name===null||name===""){name="jsdo_"+this._resource.service.name+"_"+this._resource.name}else if(typeof name!="string"){throw new Error(msg.getMsgText("jsdoMSG116","name",arguments.callee.name+"()"))}if(addMode!=progress.data.JSDO.MODE_REPLACE){throw new Error(msg.getMsgText("jsdoMSG115",arguments.callee.name))}if(this._localStorage===null){this._localStorage=new progress.data.LocalStorage}var object=this._localStorage.readFromLocalStorage(name);if(object){if(this._hasMatchingSchema(object)===false)throw new Error(msg.getMsgText("jsdoMSG117",name));try{this._restoreFromLocalStorage(object,addMode,keyFields)}catch(e){var text=e.message;throw new Error(text.replace(new RegExp("addRecords","g"),"addLocalRecords"))}}return object!==null};this._containsPrimaryKeys=function _containsPrimaryKeys(){for(var buf in this._buffers){if(this._buffers[buf]._primaryKeys===null)return false}return true};this._hasMatchingSchema=function _hasMatchingSchema(storageObject){var isValid=true;if(storageObject===null||Object.keys(storageObject).length===0)return true;if(this._dataSetName){if(storageObject[this._dataSetName]){for(var buf in this._buffers)if(storageObject[this._dataSetName][buf]===undefined){isValid=false;break}}else isValid=false}else if(this._dataProperty){storageObject=storageObject["_localStorage"];if(storageObject===undefined||storageObject[this._dataProperty]===undefined)isValid=false}else{storageObject=storageObject["_localStorage"];if(storageObject===undefined||storageObject[this._defaultTableRef._name]===undefined)isValid=false}return isValid};this.deleteLocal=function deleteLocal(name){if(arguments.length>1){throw new Error(msg.getMsgText("jsdoMSG024","JSDO",arguments.callee.name+"()"))}if(name===undefined||name===null||name===""){name="jsdo_"+this._resource.service.name+"_"+this._resource.name}else if(typeof name!="string"){throw new Error(msg.getMsgText("jsdoMSG116","name",arguments.callee.name+"()"))}if(this._localStorage===null){this._localStorage=new progress.data.LocalStorage}this._localStorage.clearLocalStorage(name)};this._prepareDataObjectForLocalStorage=function(option){var storageObject={};if(this._dataSetName){switch(option){case progress.data.JSDO.ALL_DATA:storageObject=this._createDataAndChangeSet(this._dataSetName);break;case progress.data.JSDO.CHANGES_ONLY:storageObject=this._createChangeSet(this._dataSetName,true);break}}else if(this._dataProperty){switch(option){case progress.data.JSDO.ALL_DATA:storageObject=this._createDataAndChangeSet("_localStorage");break;case progress.data.JSDO.CHANGES_ONLY:storageObject=this._createChangeSet("_localStorage",true);break}}else{switch(option){case progress.data.JSDO.ALL_DATA:storageObject=this._createDataAndChangeSet("_localStorage");break;case progress.data.JSDO.CHANGES_ONLY:storageObject=this._createChangeSet("_localStorage",true);break}}return storageObject};this._restoreFromLocalStorage=function(storageObject,addMode,keyFields){if(storageObject&&Object.keys(storageObject).length>0){if(this._dataSetName){for(var buf in this._buffers)this._restoreDataForTable(this._buffers[buf],storageObject,addMode,keyFields)}else this._restoreDataForTable(this._defaultTableRef,storageObject,addMode,keyFields)}else if(addMode===progress.data.JSDO.MODE_EMPTY)this._clearData()};this._restoreDataForTable=function(tableRef,jsonObject,addMode,keyFields){keyFields=keyFields!==undefined?keyFields:tableRef._primaryKeys;if(keyFields===undefined&&this._resource.idProperty){keyFields=[];keyFields[0]=this._resource.idProperty}if(this._dataSetName){var oldUseRelationships=this.useRelationships;this.useRelationships=false;try{tableRef.addRecords(jsonObject,addMode,keyFields)}finally{this.useRelationships=oldUseRelationships}}else{this._dataSetName="_localStorage";tableRef.addRecords(jsonObject,addMode,keyFields);this._dataSetName=null}};this.getMethodProperties=function(operation,name){var idx;if(this._resource._operations){if(this._resource._operations[operation]){return this._resource._operations[operation]}}else{this._resource._operations={}}for(var idx=0;idx1?[params.sort]:[]}sortFields="";for(index=0;index=1?params.filter:undefined}if(params.filter){if(typeof params.filter==="string"){doConversion=false}params.tableRef=tableName;if(doConversion&¶ms.tableRef===undefined){throw new Error(msg.getMsgText("jsdoMSG045","fill() or read()","params","tableRef"))}if(reqCapabilities["filter"].mapping==="ablFilter"){if(doConversion){ablFilter=progress.util._convertToABLWhereString(jsdo._buffers[params.tableRef],params.filter)}else{ablFilter=params.filter}}else if(reqCapabilities["filter"].mapping==="sqlQuery"){if(doConversion){sqlQuery=progress.util._convertToSQLQueryString(jsdo._buffers[params.tableRef],params.filter,true)}else{sqlQuery=params.filter}}}filter=JSON.stringify({ablFilter:ablFilter,sqlQuery:sqlQuery,orderBy:sortFields,skip:params.skip,top:params.top,id:params.id});params={filter:filter}}return params}});if(typeof progress.ui=="undefined")progress.ui={};progress.ui.UITableRef=function UITableRef(tableRef){this._tableRef=tableRef;this._listview=null;this._detailPage=null;this._listviewContent=undefined;this.addItem=function(format){var detailForm;if(!this._tableRef.record)throw new Error(msg.getMsgText("jsdoMSG002",this._name));if(!this._listview)return;format=format?format:this._listview.format;detailForm=this._detailPage&&this._detailPage.name?this._detailPage.name:"";if(this._listviewContent===undefined){this.clearItems()}var text=this._listview.itemTemplate?this._listview.itemTemplate:progress.ui.UIHelper._itemTemplate;text=text.replace(new RegExp("{__format__}","g"),format);text=text.replace(new RegExp("{__id__}","g"),this._tableRef.record.data._id);text=text.replace(new RegExp("{__page__}","g"),detailForm);for(var field in this._tableRef.record.data){var value=this._tableRef.record.data[field];text=text.replace(new RegExp("{"+field+"}","g"),value!==undefined&&value!==null?value:"")}this._listviewContent+=text};this.clearItems=function(){if(this._listview){this._listviewContent="";var listviewElement=document.getElementById(this._listview.name);if(listviewElement){listviewElement.innerHTML=""}}};this._getFormFieldValue=function(fieldName,detailPageName){var value=null,field;if(detailPageName===undefined){if(this._detailPage&&this._detailPage.name)detailPageName=this._detailPage.name}if(typeof $=="function"&&detailPageName){field=$("#"+detailPageName+" #"+fieldName);if(!field||field.length===0)field=$("#"+detailPageName+' [dsid="'+fieldName+'"]');if(field&&field.length==1)value=field.val()}else{field=document.getElementById(fieldName);if(field){value=field.value}}return value};this._setFormField=function(fieldName,value,detailPageName){var field=null;if(detailPageName===undefined){if(this._detailPage&&this._detailPage.name)detailPageName=this._detailPage.name}if(typeof $=="function"&&detailPageName){field=$("#"+detailPageName+" #"+fieldName);if(!field||field.length===0)field=$("#"+detailPageName+' [dsid="'+fieldName+'"]');if(field&&field.length==1)field.val(value)}else{field=document.getElementById(fieldName);if(field){field.value=value}}};this.assign=function(detailPageName){if(!this._tableRef.record)throw new Error(msg.getMsgText("jsdoMSG002",this._tableRef._name));if(arguments.length!==0&&typeof detailPageName!="string")throw new Error(msg.getMsgText("jsdoMSG024","UIHelper","assign()"));this._tableRef.record.assign(null);var fieldName;var schema=this._tableRef.getSchema();for(var i=0;i0){for(var i=0;i0&&fieldName.charAt(0)=="_")continue;if(fields&&fields[fieldName]===undefined)continue;var fieldLabel=this._tableRef._schema[i].title?this._tableRef._schema[i].title:this._tableRef._schema[i].name;var text=this._detailPage&&this._detailPage.fieldTemplate?this._detailPage.fieldTemplate:progress.ui.UIHelper._fieldTemplate;text=text.replace(new RegExp("{__label__}","g"),fieldLabel);text=text.replace(new RegExp("{__name__}","g"),this._tableRef._schema[i].name);htmltext+=text}htmltext+="";fields=null;return htmltext};this.getListViewRecord=function(htmlIElement){var id=htmlIElement.getAttribute("data-id");return this._tableRef.findById(id)};this.getFormRecord=function(detailPageName){var id=this._getFormFieldValue("_id",detailPageName);return this._tableRef.findById(id)};this._getIdOfElement=function(name){if(typeof $=="function"){var element=$("#"+name);if(!element||element.length===0){element=$('[dsid="'+name+'"]');if(element&&element.length==1){var id=element.attr("id");if(id)return id}}}return name};this.setDetailPage=function setDetailPage(obj){if(!obj||typeof obj!="object")throw new Error(msg.getMsgText("jsdoMSG012",arguments.callee.name,"object"));if(!obj.name||typeof obj.name!="string")throw new Error(msg.getMsgText("jsdoMSG012",arguments.callee.name,"name"));this._detailPage=obj;this._detailPage.name=this._getIdOfElement(this._detailPage.name)};this.setListView=function setListView(obj){if(!obj||typeof obj!="object")throw new Error(msg.getMsgText("jsdoMSG012",arguments.callee.name,"object"));if(!obj.name||typeof obj.name!="string")throw new Error(msg.getMsgText("jsdoMSG012",arguments.callee.name,"name"));if(obj.format&&typeof obj.name!="string")throw new Error(msg.getMsgText("jsdoMSG012",arguments.callee.name,"format"));this._listview=obj;this._listview.name=this._getIdOfElement(this._listview.name);if(!this._listview.format){if(typeof $=="function"){for(var i=0;i{__format__}';progress.ui.UIHelper._defaultFieldTemplate='
'+''+'
';progress.ui.UIHelper._itemTemplate=progress.ui.UIHelper._defaultItemTemplate;progress.ui.UIHelper._fieldTemplate=progress.ui.UIHelper._defaultFieldTemplate;progress.ui.UIHelper.setItemTemplate=function(template){progress.ui.UIHelper._itemTemplate=template?template:progress.ui.UIHelper._defaultItemTemplate};progress.ui.UIHelper.setFieldTemplate=function(template){progress.ui.UIHelper._fieldTemplate=template?template:progress.ui.UIHelper._defaultFieldTemplate}})();(function(){if(progress===undefined){progress={}}if(progress.data===undefined){progress.data={}}progress.data.ServicesManager={};progress.data.ServicesManager._services=[];progress.data.ServicesManager._resources=[];progress.data.ServicesManager._data=[];progress.data.ServicesManager._sessions=[];progress.data.ServicesManager._jsdosessions=[];progress.data.ServicesManager.addResource=function(id,resource){if(progress.data.ServicesManager._resources[id]===undefined){progress.data.ServicesManager._resources[id]=resource}else{throw new Error("A resource named '"+id+"' was already loaded.")}};progress.data.ServicesManager.getResource=function(id){return progress.data.ServicesManager._resources[id]};progress.data.ServicesManager.addService=function(id,service){if(progress.data.ServicesManager._services[id]===undefined){progress.data.ServicesManager._services[id]=service}else{throw new Error("A service named '"+id+"' was already loaded.")}};progress.data.ServicesManager.getService=function(id){return progress.data.ServicesManager._services[id]};progress.data.ServicesManager.addSession=function(catalogURI,session){if(progress.data.ServicesManager._sessions[catalogURI]===undefined){progress.data.ServicesManager._sessions[catalogURI]=session}else{throw new Error("Cannot load catalog '"+catalogURI+"' multiple times.")}};progress.data.ServicesManager.addJSDOSession=function(catalogURI,jsdosession){if(progress.data.ServicesManager._jsdosessions[catalogURI]===undefined){progress.data.ServicesManager._jsdosessions[catalogURI]=jsdosession}else{throw new Error("Cannot load catalog '"+catalogURI+"' multiple times.")}};progress.data.ServicesManager.getSession=function(catalogURI){try{return progress.data.ServicesManager._sessions[catalogURI]}catch(e){return null}};progress.data.ServicesManager.cleanSession=function(session){var servicesKey,resourcesKey,sessionsKey,service,services=progress.data.ServicesManager._services,resources=progress.data.ServicesManager._resources,sessions=progress.data.ServicesManager._sessions,jsdosessions=progress.data.ServicesManager._jsdosessions;for(servicesKey in services){service=null;if(services[servicesKey]._session===session){service=services[servicesKey];delete services[servicesKey]}if(!service){continue}for(resourcesKey in resources){if(resources[resourcesKey].service===service){delete resources[resourcesKey]}}}for(sessionsKey in sessions){if(sessions[sessionsKey]===session){delete sessions[sessionsKey];if(jsdosessions[sessionsKey]){delete jsdosessions[sessionsKey]}}}};function extractParamsFromURL(url){var urlParams=[],paramName=null;if(typeof url==="string"){url.split("").forEach(function(c){if(c==="{"){paramName=""}else if(c==="}"){if(paramName){urlParams.push(paramName)}paramName=null}else if(paramName!==null){paramName+=c}})}return urlParams}progress.data.ServicesManager.addCatalog=function(services,session){var name,value;if(!services){throw new Error("Cannot find 'services' property in catalog file.")}if(services instanceof Array){services.forEach(function(service){if(progress.data.ServicesManager.getService(service.name)!==undefined){throw new Error("A service named '"+service.name+"' was already loaded.")}if(service.resources instanceof Array){service.resources.forEach(function(resource){if(progress.data.ServicesManager.getResource(resource.name)!==undefined){throw new Error("A resource named '"+resource.name+"' was already loaded.")}})}else{throw new Error("Missing 'resources' array in catalog.")}});for(var j=0;j1){throw new Error(progress.data._getMsgText("jsdoMSG122","Session","setContext",1))}if(typeof context==="object"){contextObject={};for(prop in context){if(context.hasOwnProperty(prop)){if(typeof context[prop]!=="function"){contextObject[prop]=context[prop]}}}}else if(context===undefined||context===null){contextObject={}}else{throw new Error(progress.data._getMsgText("jsdoMSG121","Session",1,"Object","setContextProperty"))}contextString=null};this.getContext=function(){if(arguments.length>0){throw new Error(progress.data._getMsgText("jsdoMSG122","Session","getContext",0))}return contextObject};this.getContextProperty=function(propertyName){if(arguments.length<1){throw new Error(progress.data._getMsgText("jsdoMSG122","Session","getContextProperty",1))}if(arguments.length>1){throw new Error(progress.data._getMsgText("jsdoMSG122","Session","getContextProperty",1))}return contextObject[propertyName]}};progress.data.Session=function Session(options){var defPropSupported=false;if(typeof Object.defineProperty==="function"){defPropSupported=true}var that=this,jsdosession,isUserAgentiOS=false,isFirefox=false,isEdge=false,isIE=false,canPassCredentialsToOpenWithCORS=false,defaultiOSBasicAuthTimeout=4e3,deviceIsOnline=true,restApplicationIsOnline=false,oepingAvailable=false,defaultPartialPingURI="/rest/_oeping",partialPingURI=defaultPartialPingURI,_storageKey,_authProvider=null,customCredentials=false,storedAuthModel,storedURI,newURI,stateWasReadFromStorage=false;if(!options||options._silent!==true){console.warn("Session: As of JSDO 4.4, the Session object has been deprecated. "+"Please use the JSDOSession object instead.")}if(typeof navigator!=="undefined"){if(typeof navigator.userAgent!=="undefined"){isUserAgentiOS=navigator.userAgent.match(/(iPad)|(iPhone)|(iPod)/i);isFirefox=navigator.userAgent.toLowerCase().indexOf("firefox")>-1;isEdge=navigator.userAgent.indexOf("Edge/")>-1;isIE=navigator.userAgent.indexOf("Trident/")>-1||navigator.userAgent.indexOf("MSIE 10")>-1}}canPassCredentialsToOpenWithCORS=!(isFirefox||isEdge||isIE);function canPassCredentialsToOpen(){return canPassCredentialsToOpenWithCORS}this._onlineHandler=function(){setDeviceIsOnline(true);that.trigger("online",that,null)};this._offlineHandler=function(){setDeviceIsOnline(false);that.trigger("offline",that,progress.data.Session.DEVICE_OFFLINE,null)};if(typeof window!=="undefined"&&window.addEventListener){window.addEventListener("online",this._onlineHandler,false);window.addEventListener("offline",this._offlineHandler,false)}var _catalogURIs=[];var _services=[];var _jsdos=[];this.onOpenRequest=null;var _password=null;if(defPropSupported){var _userName=null;Object.defineProperty(this,"userName",{get:function(){return _userName},enumerable:true});var _loginTarget="/static/home.html";Object.defineProperty(this,"loginTarget",{get:function(){return _loginTarget},enumerable:true});var _serviceURI=null;Object.defineProperty(this,"serviceURI",{get:function(){return _serviceURI},enumerable:true});Object.defineProperty(this,"catalogURIs",{get:function(){return _catalogURIs},enumerable:true});Object.defineProperty(this,"services",{get:function(){return _services},enumerable:true});var _loginResult=null;Object.defineProperty(this,"loginResult",{get:function(){return _loginResult},enumerable:true});var _loginHttpStatus=null;Object.defineProperty(this,"loginHttpStatus",{get:function(){return _loginHttpStatus},enumerable:true});var _clientContextId=null;Object.defineProperty(this,"clientContextId",{get:function(){return _clientContextId},enumerable:true});var _authenticationModel=progress.data.Session.AUTH_TYPE_ANON;Object.defineProperty(this,"authenticationModel",{get:function(){return _authenticationModel},set:function(newval){if(newval){newval=newval.toLowerCase()}switch(newval){case progress.data.Session.AUTH_TYPE_FORM:case progress.data.Session.AUTH_TYPE_BASIC:case progress.data.Session.AUTH_TYPE_ANON:case progress.data.Session.AUTH_TYPE_SSO:case null:_authenticationModel=newval;storeSessionInfo("authenticationModel",newval);break;default:throw new Error("Error setting Session.authenticationModel. '"+newval+"' is an invalid value.")}},enumerable:true});var _lastSessionXHR=null;Object.defineProperty(this,"lastSessionXHR",{get:function(){return _lastSessionXHR},enumerable:true});Object.defineProperty(this,"connected",{get:function(){return this.loginResult===progress.data.Session.LOGIN_SUCCESS&&restApplicationIsOnline&&deviceIsOnline},enumerable:true});Object.defineProperty(this,"JSDOs",{get:function(){return _jsdos},enumerable:true});var _pingInterval=0;var _timeoutID=null;Object.defineProperty(this,"pingInterval",{get:function(){return _pingInterval},set:function(newval){if(typeof newval==="number"&&newval>=0){_pingInterval=newval;storeSessionInfo("pingInterval",newval);if(newval>0){if(this.loginResult===progress.data.Session.LOGIN_SUCCESS){_timeoutID=setTimeout(this._autoping,newval)}}else if(newval===0){clearTimeout(_timeoutID);_pingInterval=0}}else{throw new Error("Error setting Session.pingInterval. '"+newval+"' is an invalid value.")}},enumerable:true});var _contextProperties=new progress.data.ContextProperties;Object.defineProperty(this,"_contextProperties",{get:function(){return _contextProperties},enumerable:false});var isInvalidated=false;Object.defineProperty(this,"_isInvalidated",{get:function(){return isInvalidated},enumerable:false});Object.defineProperty(this,"_authProvider",{get:function(){return _authProvider},set:function(newval){if(_authProvider){throw new Error("Internal Error setting Session._authProvider. '"+"The property has already been set.")}setAuthProvider(newval)},enumerable:false})}else{this.userName=null;this.loginTarget="/static/home.html";this.serviceURI=null;this.catalogURIs=[];this.services=[];this.loginResult=null;this.loginHttpStatus=null;this.clientContextId=null;this.authenticationModel=progress.data.Session.AUTH_TYPE_ANON;this.lastSessionXHR=null}function storeSessionInfo(infoName,value){var key;if(that.loginResult===progress.data.Session.LOGIN_SUCCESS&&typeof sessionStorage==="object"&&_storageKey){key=_storageKey;if(infoName){key=key+"."+infoName}if(typeof value!=="undefined"){sessionStorage.setItem(key,JSON.stringify(value))}}}function retrieveSessionInfo(infoName){var key,jsonStr,value=null;if(typeof sessionStorage==="object"&&_storageKey){key=_storageKey;if(infoName){key=key+"."+infoName}jsonStr=sessionStorage.getItem(key);if(jsonStr!==null){try{value=JSON.parse(jsonStr)}catch(e){value=null}}return value}}function clearSessionInfo(infoName){var key;if(typeof sessionStorage==="object"&&_storageKey){key=_storageKey;if(infoName){key=key+"."+infoName;sessionStorage.removeItem(key)}}}function storeAllSessionInfo(){if(_storageKey){storeSessionInfo("loginResult",that.loginResult);storeSessionInfo("userName",that.userName);storeSessionInfo("serviceURI",that.serviceURI);storeSessionInfo("loginHttpStatus",that.loginHttpStatus);storeSessionInfo("authenticationModel",that.authenticationModel);storeSessionInfo("pingInterval",that.pingInterval);storeSessionInfo("oepingAvailable",oepingAvailable);storeSessionInfo("partialPingURI",partialPingURI);storeSessionInfo("clientContextId",that.clientContextId);storeSessionInfo("deviceIsOnline",deviceIsOnline);storeSessionInfo("restApplicationIsOnline",restApplicationIsOnline);if(that._authProvider){storeSessionInfo("_authProvider.init",{uri:that._authProvider.uri,authenticationModel:that._authProvider.authenticationModel})}storeSessionInfo(_storageKey,true)}}function clearAllSessionInfo(){if(_storageKey){if(retrieveSessionInfo(_storageKey)){clearSessionInfo("loginResult");clearSessionInfo("userName");clearSessionInfo("serviceURI");clearSessionInfo("loginHttpStatus");clearSessionInfo("clientContextId");clearSessionInfo("deviceIsOnline");clearSessionInfo("restApplicationIsOnline");clearSessionInfo("authenticationModel");clearSessionInfo("pingInterval");clearSessionInfo("oepingAvailable");clearSessionInfo("partialPingURI");clearSessionInfo("_authProvider.init");clearSessionInfo(_storageKey)}}}function setSessionInfoFromStorage(key){var authproviderInitObject;if(retrieveSessionInfo(key)){setLoginResult(retrieveSessionInfo("loginResult"),this);setUserName(retrieveSessionInfo("userName"),this);setServiceURI(retrieveSessionInfo("serviceURI"),this);setLoginHttpStatus(retrieveSessionInfo("loginHttpStatus"),this);setClientContextID(retrieveSessionInfo("clientContextId"),this);setDeviceIsOnline(retrieveSessionInfo("deviceIsOnline"));setRestApplicationIsOnline(retrieveSessionInfo("restApplicationIsOnline"));that.authenticationModel=retrieveSessionInfo("authenticationModel");that.pingInterval=retrieveSessionInfo("pingInterval");setOepingAvailable(retrieveSessionInfo("oepingAvailable"));setPartialPingURI(retrieveSessionInfo("partialPingURI"));if(!that._authProvider){authproviderInitObject=retrieveSessionInfo("_authProvider.init");if(authproviderInitObject){setAuthProvider(new progress.data.AuthenticationProvider(authproviderInitObject))}}}}function setUserName(newname,sessionObject){if(defPropSupported){_userName=newname}else{sessionObject.userName=newname}storeSessionInfo("userName",newname)}function setLoginTarget(target,sessionObject){if(defPropSupported){_loginTarget=target}else{sessionObject.loginTarget=target}}function setServiceURI(url,sessionObject){if(defPropSupported){_serviceURI=url}else{sessionObject.serviceURI=url}storeSessionInfo("serviceURI",url)}function pushCatalogURIs(url,sessionObject){if(defPropSupported){_catalogURIs.push(url)}else{sessionObject.catalogURIs.push(url)}}function pushService(serviceObject,sessionObject){if(defPropSupported){_services.push(serviceObject)}else{sessionObject.services.push(serviceObject)}}function findService(serviceName){_services.forEach(function(service){if(service.name===serviceName){return service}});return null}function setLoginResult(result,sessionObject){if(defPropSupported){_loginResult=result}else{sessionObject.loginResult=result}if(result===progress.data.Session.LOGIN_SUCCESS){storeSessionInfo("loginResult",result)}else{clearAllSessionInfo()}}function setLoginHttpStatus(status,sessionObject){if(defPropSupported){_loginHttpStatus=status}else{sessionObject.loginHttpStatus=status}storeSessionInfo("loginHttpStatus",status)}function setClientContextIDfromXHR(xhr,sessionObject){if(xhr){setClientContextID(getResponseHeaderNoError(xhr,"X-CLIENT-CONTEXT-ID"),sessionObject)}}function setClientContextID(ccid,sessionObject){if(defPropSupported){_clientContextId=ccid}else{sessionObject.clientContextId=ccid}storeSessionInfo("clientContextId",ccid)}function setLastSessionXHR(xhr,sessionObject){if(defPropSupported){_lastSessionXHR=xhr}else{sessionObject.lastSessionXHR=xhr}}function setDeviceIsOnline(value){deviceIsOnline=value;storeSessionInfo("deviceIsOnline",value)}function setAuthProvider(value){_authProvider=value?value:null}function setRestApplicationIsOnline(value){restApplicationIsOnline=value;storeSessionInfo("restApplicationIsOnline",value)}function setOepingAvailable(value){oepingAvailable=value;storeSessionInfo("oepingAvailable",value)}function setPartialPingURI(value){partialPingURI=value;storeSessionInfo("partialPingURI",value)}function getResponseHeaderNoError(xhr,headerName){var allHeaders=xhr._pdsResponseHeaders,regExp;if(allHeaders===undefined){allHeaders=xhr.getAllResponseHeaders();if(allHeaders){xhr._pdsResponseHeaders=allHeaders}else{xhr._pdsResponseHeaders=null}}if(allHeaders){regExp=new RegExp("^"+headerName+":","mi");if(allHeaders.match(regExp)){return xhr.getResponseHeader(headerName)}}return null}this._pushJSDOs=function(jsdo){_jsdos.push(jsdo)};this._openRequest=function(xhr,verb,url,async,callback){var urlPlusCCID,that=this;function afterOpenAndAuthorize(arg){if(arg instanceof Error){throw arg}else{if(that.clientContextId&&that.clientContextId!=="0"){xhr.setRequestHeader("X-CLIENT-CONTEXT-ID",that.clientContextId)}setRequestHeaderFromContextProps(that,xhr);if(typeof that.onOpenRequest==="function"){var params={xhr:xhr,verb:verb,uri:urlPlusCCID,async:async,formPreTest:false,session:that};that.onOpenRequest(params)}if(callback){callback()}}}if(this._isInvalidated){throw new Error(progress.data._getMsgText("jsdoMSG510","Session"))}if(this.loginResult!==progress.data.Session.LOGIN_SUCCESS&&!this._authProvider&&this.authenticationModel){throw new Error("Attempted to make server request when there is no active session.")}urlPlusCCID=this._prependAppURL(url);urlPlusCCID=this._addCCIDtoURL(urlPlusCCID);if(progress.data.Session._useTimeStamp){urlPlusCCID=progress.data.Session._addTimeStampToURL(urlPlusCCID)}if(this._authProvider){this._authProvider._openRequestAndAuthorize(xhr,verb,urlPlusCCID,async,afterOpenAndAuthorize)}else{this._setXHRCredentials(xhr,verb,urlPlusCCID,this.userName,_password,async);if(this.authenticationModel===progress.data.Session.AUTH_TYPE_FORM){_addWithCredentialsAndAccept(xhr,"application/json")}afterOpenAndAuthorize(xhr)}};this.pingTestCallback=function(cbArgs){var foundOeping=cbArgs.pingResult?true:false;setOepingAvailable(foundOeping)};this._onReadyStateChangeGeneric=function(){var xhr=this;var result;var errorObject;clearTimeout(xhr._requestTimeout);if(xhr.readyState===4){result=null;errorObject=null;if(typeof xhr.onResponseFn==="function"){try{result=xhr.onResponseFn(xhr)}catch(e){errorObject=e}}if(typeof xhr.onResponseProcessedFn==="function"){if(!result){result=progress.data.Session.GENERAL_FAILURE}xhr.onResponseProcessedFn(xhr.pdsession,result,errorObject,xhr)}}};this._disconnect=function(deferred){this._processDisconnectResult(null,deferred)};this._processDisconnectResult=function(xhr,deferred){this._reinitializeAfterLogout(this,progress.data.Session.SUCCESS);this._disconnectComplete(this,progress.data.Session.SUCCESS,null,null,deferred)};this._disconnectComplete=function(pdsession,result,errObj,xhr,deferred){pdsession.trigger("afterDisconnect",pdsession,result,errObj,xhr,deferred)};var pwSave=null;var unameSave=null;this.login=function(serviceURI,loginUserName,loginPassword,loginTarget){var uname,pw,isAsync=false,args=[],deferred,iOSBasicAuthTimeout,uriForRequest;pwSave=null;unameSave=null;if(!defPropSupported){this.authenticationModel=this.authenticationModel.toLowerCase()}if(this.authenticationModel===progress.data.Session.AUTH_TYPE_SSO){throw new Error(progress.data._getMsgText("jsdoMSG057","Session","login()"))}if(this.loginResult===progress.data.Session.LOGIN_SUCCESS||this._authProvider){throw new Error("Attempted to call login() on a Session object that is already logged in.")}if(arguments.length>0){if(arguments[0]&&typeof arguments[0]==="object"){args[0]=arguments[0].serviceURI;args[1]=arguments[0].userName;args[2]=arguments[0].password;args[3]=arguments[0].loginTarget;args[4]=arguments[0].async;deferred=arguments[0].deferred;iOSBasicAuthTimeout=arguments[0].iOSBasicAuthTimeout;if(typeof iOSBasicAuthTimeout==="undefined"){iOSBasicAuthTimeout=defaultiOSBasicAuthTimeout}else if(iOSBasicAuthTimeout&&typeof iOSBasicAuthTimeout!=="number"){throw new Error(progress.data._getMsgText("jsdoMSG033","Session","login","The iOSBasicAuthTimeout argument was invalid."))}}else{args=arguments}}if(args.length>0){if(args[0]){var restURLtemp=args[0];if(restURLtemp[restURLtemp.length-1]==="/"){restURLtemp=restURLtemp.substring(0,restURLtemp.length-1)}setServiceURI(restURLtemp,this)}else if(!this.serviceURI){setLoginResult(progress.data.Session.LOGIN_GENERAL_FAILURE,this);throw new Error("Session.login() is missing the serviceURI argument.")}if(args[1]){uname=args[1]}if(args[2]){pw=args[2]}if(args[3]){setLoginTarget(args[3],this)}if(args[4]){if(typeof args[4]==="boolean"){isAsync=args[4]}else{throw new Error("Session.login() was passed an async setting that is not a boolean.")}}}else{setLoginResult(progress.data.Session.LOGIN_GENERAL_FAILURE,this);throw new Error("Session.login() is missing the serviceURI argument.")}unameSave=uname;pwSave=pw;if(this.authenticationModel===progress.data.Session.AUTH_TYPE_ANON||this.authenticationModel===progress.data.Session.AUTH_TYPE_FORM){uname=null;pw=null}var xhr=new XMLHttpRequest;xhr.pdsession=this;try{uriForRequest=this.serviceURI+this.loginTarget;if(progress.data.Session._useTimeStamp){uriForRequest=progress.data.Session._addTimeStampToURL(uriForRequest)}this._setXHRCredentials(xhr,"GET",uriForRequest,uname,pw,isAsync);progress.data.Session._setNoCacheHeaders(xhr);setRequestHeaderFromContextProps(this,xhr);if(this.authenticationModel===progress.data.Session.AUTH_TYPE_FORM){_addWithCredentialsAndAccept(xhr,"application/json,text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")}xhr._isAsync=isAsync;if(isAsync){xhr.onreadystatechange=this._onReadyStateChangeGeneric;if(this.authenticationModel===progress.data.Session.AUTH_TYPE_FORM){xhr.onResponseFn=this._afterFormPretestLogin}else{xhr.onResponseFn=this._processLoginResult;xhr.onResponseProcessedFn=this._loginComplete}if(this.authenticationModel===progress.data.Session.AUTH_TYPE_BASIC&&isUserAgentiOS&&iOSBasicAuthTimeout>0){xhr._requestTimeout=setTimeout(function(){clearTimeout(xhr._requestTimeout);xhr._iosTimeOutExpired=true;xhr.abort()},iOSBasicAuthTimeout)}xhr._jsdosession=jsdosession;xhr._deferred=deferred}if(typeof this.onOpenRequest==="function"){var isFormPreTest=false;if(this.authenticationModel===progress.data.Session.AUTH_TYPE_FORM){isFormPreTest=true}setLastSessionXHR(xhr,this);var params={xhr:xhr,verb:"GET",uri:this.serviceURI+this.loginTarget,async:false,formPreTest:isFormPreTest,session:this};this.onOpenRequest(params);xhr=params.xhr}setLastSessionXHR(xhr,this);xhr.send(null)}catch(e){clearTimeout(xhr._requestTimeout);setLoginHttpStatus(xhr.status,this);setLoginResult(progress.data.Session.LOGIN_GENERAL_FAILURE,this);unameSave=null;pwSave=null;throw e}if(isAsync){return progress.data.Session.ASYNC_PENDING}else{setLoginHttpStatus(xhr.status,this);if(this.authenticationModel===progress.data.Session.AUTH_TYPE_FORM){return this._afterFormPretestLogin(xhr)}else{return this._processLoginResult(xhr)}}};this._afterFormPretestLogin=function(xhr){var pdsession=xhr.pdsession;setLoginHttpStatus(xhr.status,xhr.pdsession);var formLoginParams={xhr:xhr,pw:pwSave,uname:unameSave,theSession:pdsession};try{return doFormLogin(formLoginParams)}catch(e){pwSave=null;unameSave=null;throw e}};function doFormLogin(args){var xhr=args.xhr;var theSession=args.theSession;var oldXHR;var contentType=null;var needAuth=false;var params={session:theSession,xhr:xhr,statusFromjson:null};contentType=xhr.getResponseHeader("Content-Type");if(contentType&&contentType.indexOf("application/json")>=0){handleJSONLoginResponse(params);if(!params.statusFromjson||params.statusFromjson>=400&¶ms.statusFromjson<500){needAuth=true}else{setLoginHttpStatus(params.statusFromjson,theSession)}}else{if(theSession.loginHttpStatus===200){if(_gotLoginForm(xhr)){needAuth=true}}}if(needAuth){oldXHR=xhr;xhr=new XMLHttpRequest;args.xhr=xhr;params.xhr=xhr;xhr.pdsession=oldXHR.pdsession;xhr._isAsync=oldXHR._isAsync;xhr._deferred=oldXHR._deferred;xhr._jsdosession=oldXHR._jsdosession;xhr.open("POST",theSession.serviceURI+"/static/auth/j_spring_security_check",xhr._isAsync);xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");xhr.setRequestHeader("Cache-Control","max-age=0");setRequestHeaderFromContextProps(theSession,xhr);_addWithCredentialsAndAccept(xhr,"application/json");try{if(typeof theSession.onOpenRequest==="function"){var cbparams={xhr:xhr,verb:"POST",uri:theSession.serviceURI+"/static/auth/j_spring_security_check",async:xhr._isAsync,formPreTest:false,session:theSession};theSession.onOpenRequest(cbparams);xhr=cbparams.xhr}if(xhr._isAsync){xhr.onreadystatechange=theSession._onReadyStateChangeGeneric;xhr.onResponseFn=theSession._afterFormLogin;xhr.onResponseProcessedFn=theSession._loginComplete}xhr.send("j_username="+encodeURIComponent(args.uname)+"&j_password="+encodeURIComponent(args.pw)+"&submit=Submit")}catch(e){setLoginResult(progress.data.Session.LOGIN_GENERAL_FAILURE,theSession);setLoginHttpStatus(xhr.status,theSession);unameSave=null;pwSave=null;throw e}}if(xhr._isAsync&&!needAuth){xhr.onResponseProcessedFn=theSession._loginComplete;return theSession._afterFormLogin(xhr)}if(!xhr._isAsync){return theSession._afterFormLogin(xhr)}}this._afterFormLogin=function(xhr){var theSession=xhr.pdsession;var params={session:theSession,xhr:xhr,statusFromjson:null};var contentType=xhr.getResponseHeader("Content-Type");if(contentType&&contentType.indexOf("application/json")>=0){handleJSONLoginResponse(params);if(!params.statusFromjson){throw new Error("Internal OpenEdge Mobile client error handling login response. HTTP status: "+xhr.status+".")}setLoginHttpStatus(params.statusFromjson,theSession)}else{if(xhr.status===200){if(_gotLoginFailure(xhr)||_gotLoginForm(xhr)){setLoginHttpStatus(401,theSession)}else{setLoginHttpStatus(xhr.status,theSession)}}}return theSession._processLoginResult(xhr)};this._processLoginResult=function(xhr){var pdsession=xhr.pdsession;setLoginHttpStatus(xhr.status,xhr.pdsession);if(pdsession.loginHttpStatus===200){setLoginResult(progress.data.Session.LOGIN_SUCCESS,pdsession);setRestApplicationIsOnline(true);setUserName(unameSave,pdsession);_password=pwSave;pdsession._saveClientContextId(xhr);storeAllSessionInfo();var pingTestArgs={pingURI:null,async:true,onCompleteFn:null,fireEventIfOfflineChange:true,onReadyStateFn:pdsession._pingtestOnReadyStateChange};pingTestArgs.pingURI=pdsession._makePingURI();pdsession._sendPing(pingTestArgs)}else{if(pdsession.loginHttpStatus===401){setLoginResult(progress.data.Session.LOGIN_AUTHENTICATION_FAILURE,pdsession)}else{setLoginResult(progress.data.Session.LOGIN_GENERAL_FAILURE,pdsession)}}setLastSessionXHR(xhr,pdsession);updateContextPropsFromResponse(pdsession,xhr);unameSave=null;pwSave=null;if(xhr._iosTimeOutExpired){throw new Error(progress.data._getMsgText("jsdoMSG047","login"))}return pdsession.loginResult};this._loginComplete=function(pdsession,result,errObj,xhr){pdsession.trigger("afterLogin",pdsession,result,errObj,xhr)};this.logout=function(args){var isAsync=false,errorObject=null,xhr,deferred,params;if(this.authenticationModel===progress.data.Session.AUTH_TYPE_SSO){throw new Error(progress.data._getMsgText("jsdoMSG057","Session","logout()"))}if(this.loginResult!==progress.data.Session.LOGIN_SUCCESS&&this.authenticationModel){throw new Error("Attempted to call logout when there is no active session.")}if(typeof args==="object"){isAsync=args.async;if(isAsync&&typeof isAsync!=="boolean"){throw new Error(progress.data._getMsgText("jsdoMSG033","Session","logout","The async argument was invalid."))}deferred=args.deferred}xhr=new XMLHttpRequest;xhr.pdsession=this;try{xhr._jsdosession=jsdosession;xhr._deferred=deferred;if(this.authenticationModel===progress.data.Session.AUTH_TYPE_FORM||this.authenticationModel===progress.data.Session.AUTH_TYPE_BASIC){if(isAsync){xhr.onreadystatechange=this._onReadyStateChangeGeneric;xhr.onResponseFn=this._processLogoutResult;xhr.onResponseProcessedFn=this._logoutComplete}xhr.open("GET",this.serviceURI+"/static/auth/j_spring_security_logout",isAsync);try{xhr.withCredentials=true}catch(e){}xhr.setRequestHeader("Accept","application/json");setRequestHeaderFromContextProps(this,xhr);if(typeof this.onOpenRequest==="function"){setLastSessionXHR(xhr,this);params={xhr:xhr,verb:"GET",uri:this.serviceURI+"/static/auth/j_spring_security_logout",async:false,formPreTest:false,session:this};this.onOpenRequest(params);xhr=params.xhr}setLastSessionXHR(xhr,this);xhr.send()}else{xhr._anonymousLogoutOK=true}}catch(e){this._reinitializeAfterLogout(this,false);throw e}if(!isAsync){try{this._processLogoutResult(xhr)}catch(e){throw e}}if(isAsync&&this.authenticationModel===progress.data.Session.AUTH_TYPE_ANON){try{this._processLogoutResult(xhr)}catch(e){errorObject=e}this._logoutComplete(this,null,errorObject,xhr)}};this.invalidate=function(){isInvalidated=true;cleanServicesManager()};this._logoutComplete=function(pdsession,result,errorObject,xhr){pdsession.trigger("afterLogout",pdsession,errorObject,xhr)};this._processLogoutResult=function(xhr){var logoutSucceeded;var pdsession=xhr.pdsession;var basicStatusOK=false;if(xhr._anonymousLogoutOK){logoutSucceeded=true}else if(xhr.status!==200){if(pdsession.authenticationModel===progress.data.Session.AUTH_TYPE_BASIC){if(xhr.status===404){logoutSucceeded=true}else{logoutSucceeded=false;throw new Error("Error logging out, HTTP status = "+xhr.status)}}else{logoutSucceeded=false;throw new Error("Error logging out, HTTP status = "+xhr.status)}}else{logoutSucceeded=true}updateContextPropsFromResponse(pdsession,xhr);pdsession._reinitializeAfterLogout(pdsession,logoutSucceeded)};this._reinitializeAfterLogout=function(pdsession,success){setLoginResult(null,pdsession);setLoginHttpStatus(null,pdsession);setClientContextID(null,pdsession);setUserName(null,pdsession);setAuthProvider(null);_password=null;if(success){setRestApplicationIsOnline(false);setOepingAvailable(false);setPartialPingURI(defaultPartialPingURI);setLastSessionXHR(null,pdsession);clearTimeout(_timeoutID)}};this.addCatalog=function(arg1,arg2,arg3,arg4){var catalogURI,catalogUserName,catalogPassword,isAsync=false,xhr,deferred,iOSBasicAuthTimeout,catalogIndex,authProvider,that=this;function addCatalogAfterOpen(){progress.data.Session._setNoCacheHeaders(xhr);setRequestHeaderFromContextProps(that,xhr);if(isAsync){xhr.onreadystatechange=that._onReadyStateChangeGeneric;xhr.onResponseFn=that._processAddCatalogResult;xhr.onResponseProcessedFn=that._addCatalogComplete;if(that.authenticationModel===progress.data.Session.AUTH_TYPE_BASIC&&isUserAgentiOS&&iOSBasicAuthTimeout){xhr._requestTimeout=setTimeout(function(){clearTimeout(xhr._requestTimeout);xhr._iosTimeOutExpired=true;xhr.abort()},iOSBasicAuthTimeout)}xhr._jsdosession=jsdosession;xhr._deferred=deferred;xhr._catalogIndex=catalogIndex}try{if(typeof that.onOpenRequest==="function"){setLastSessionXHR(xhr,that);var params={xhr:xhr,verb:"GET",uri:catalogURI,async:false,formPreTest:false,session:that};that.onOpenRequest(params);xhr=params.xhr}setLastSessionXHR(xhr,that);xhr.send(null)}catch(e){throw new Error("Error retrieving catalog '"+catalogURI+"'.\n"+e.message)}if(isAsync){return progress.data.Session.ASYNC_PENDING}else{return that._processAddCatalogResult(xhr)}}if(this._isInvalidated){throw new Error(progress.data._getMsgText("jsdoMSG510","JSDOSession"))}customCredentials=true;if(arguments.length>0){if(typeof arg1==="object"){if(!arguments[0].offlineAddCatalog){if(this.loginResult!==progress.data.Session.LOGIN_SUCCESS&&!this._authProvider&&this.authenticationModel){throw new Error("Attempted to call addCatalog when there is no active session.")}}catalogURI=arg1.catalogURI;if(!catalogURI||typeof catalogURI!=="string"){throw new Error(progress.data._getMsgText("jsdoMSG033","Session","addCatalog","The catalogURI argument was missing or invalid."))}catalogUserName=arg1.userName;if(catalogUserName&&typeof catalogUserName!=="string"){throw new Error(progress.data._getMsgText("jsdoMSG033","Session","addCatalog","The catalogUserName argument was invalid."))}catalogPassword=arg1.password;if(catalogPassword&&typeof catalogPassword!=="string"){throw new Error(progress.data._getMsgText("jsdoMSG033","Session","addCatalog","The catalogPassword argument was invalid."))}isAsync=arg1.async;if(isAsync&&typeof isAsync!=="boolean"){throw new Error(progress.data._getMsgText("jsdoMSG033","Session","addCatalog","The async argument was invalid."))}iOSBasicAuthTimeout=arg1.iOSBasicAuthTimeout;if(typeof iOSBasicAuthTimeout==="undefined"){iOSBasicAuthTimeout=defaultiOSBasicAuthTimeout}else if(iOSBasicAuthTimeout&&typeof iOSBasicAuthTimeout!=="number"){throw new Error(progress.data._getMsgText("jsdoMSG033","Session","addCatalog","The iOSBasicAuthTimeout argument was invalid."))}authProvider=arg1.authProvider;deferred=arg1.deferred;catalogIndex=arg1.catalogIndex}else{catalogURI=arg1;if(typeof catalogURI!=="string"){throw new Error("First argument to Session.addCatalog must be the URL of the catalog.")}catalogUserName=arg2;if(catalogUserName&&typeof catalogUserName!=="string"){throw new Error("Second argument to Session.addCatalog must be a user name string.")}catalogPassword=arg3;if(catalogPassword&&typeof catalogPassword!=="string"){throw new Error("Third argument to Session.addCatalog must be a password string.")}}}else{throw new Error("Session.addCatalog is missing its first argument, the URL of the catalog.")}if(!authProvider){authProvider=this._authProvider;customCredentials=false}if(!catalogUserName){catalogUserName=this.userName}if(!catalogPassword){catalogPassword=_password}xhr=new XMLHttpRequest;xhr.pdsession=this;xhr._catalogURI=catalogURI;if(progress.data.ServicesManager.getSession(catalogURI)!==undefined){if(isAsync){xhr._jsdosession=jsdosession;xhr._deferred=deferred;xhr._catalogIndex=catalogIndex;setTimeout(this._addCatalogComplete,10,this,progress.data.Session.CATALOG_ALREADY_LOADED,null,xhr);return progress.data.Session.ASYNC_PENDING}return progress.data.Session.CATALOG_ALREADY_LOADED}if(authProvider){authProvider._openRequestAndAuthorize(xhr,"GET",catalogURI,isAsync,addCatalogAfterOpen);return progress.data.Session.ASYNC_PENDING}else{this._setXHRCredentials(xhr,"GET",catalogURI,catalogUserName,catalogPassword,isAsync);return addCatalogAfterOpen()}};this._processAddCatalogResult=function(xhr){var _catalogHttpStatus=xhr.status;var theSession=xhr.pdsession;var servicedata;var catalogURI=xhr._catalogURI,serviceURL,theJSDOSession=jsdosession;if(!customCredentials){toggleOnlineState(xhr)}if((_catalogHttpStatus===200||_catalogHttpStatus===0)&&xhr.responseText){servicedata=theSession._parseCatalog(xhr);try{progress.data.ServicesManager.addCatalog(servicedata,theSession)}catch(e){if(progress.data.ServicesManager.getSession(catalogURI)!==undefined){return progress.data.Session.CATALOG_ALREADY_LOADED}throw new Error("Error processing catalog '"+catalogURI+"'. \n"+e.message)}servicedata.forEach(function(service){serviceURL=theSession._prependAppURL(service.address);pushService(new progress.data.MobileServiceObject({name:service.name,uri:serviceURL}),theSession);if(service.settings&&service.settings.useXClientProps&&!theSession.xClientProps){console.warn("Catalog warning: Service settings property 'useXClientProps' "+"is true but 'xClientProps' property has not been set.")}});pushCatalogURIs(catalogURI,theSession);progress.data.ServicesManager.addSession(catalogURI,theSession);if(theJSDOSession){progress.data.ServicesManager.addJSDOSession(catalogURI,theJSDOSession)}}else if(_catalogHttpStatus===401){return progress.data.AuthenticationProvider._getAuthFailureReason(xhr)}else if(xhr._iosTimeOutExpired){throw new Error(progress.data._getMsgText("jsdoMSG047","addCatalog"))}else{throw new Error("Error retrieving catalog '"+catalogURI+"'. Http status: "+_catalogHttpStatus+".")}return progress.data.Session.SUCCESS};this._addCatalogComplete=function(pdsession,result,errObj,xhr){pdsession.trigger("afterAddCatalog",pdsession,result,errObj,xhr)};this.ping=function(args){var pingResult=false,pingArgs={pingURI:null,async:true,onCompleteFn:null,fireEventIfOfflineChange:true,onReadyStateFn:this._onReadyStateChangePing,offlineReason:null};if(this._isInvalidated){throw new Error(progress.data._getMsgText("jsdoMSG510","Session"))}if(!this._authProvider&&this.loginResult!==progress.data.Session.LOGIN_SUCCESS){throw new Error("Attempted to call ping when not logged in.")}if(args){if(args.async!==undefined){pingArgs.async=args.async}if(args.doNotFireEvent!==undefined){pingArgs.fireEventIfOfflineChange=!args.doNotFireEvent}if(args.onCompleteFn&&typeof args.onCompleteFn==="function"){pingArgs.onCompleteFn=args.onCompleteFn}pingArgs.deferred=args.deferred;pingArgs.jsdosession=args.jsdosession}pingArgs.pingURI=that._makePingURI();that._sendPing(pingArgs);if(!pingArgs.async){if(pingArgs.xhr){pingResult=that._processPingResult(pingArgs);if(args.offlineReason!==undefined){args.offlineReason=pingArgs.offlineReason}}else{pingResult=false}if(args.xhr!==undefined){args.xhr=pingArgs.xhr}}return pingResult};this._isOnlineStateChange=function(isOnline){var stateChanged=false;if(isOnline&&!this.connected){stateChanged=true}else if(!isOnline&&this.connected){stateChanged=true}return stateChanged};this._checkServiceResponse=function(xhr,success,request){var offlineReason=null,wasOnline=this.connected;updateContextPropsFromResponse(this,xhr);if(!this._events){return}var offlineObservers=this._events.offline||[];var onlineObservers=this._events.online||[];if(offlineObservers.length===0&&onlineObservers.length===0){return}if(success){setRestApplicationIsOnline(true);setDeviceIsOnline(true)}else{if(deviceIsOnline){var localPingArgs={doNotFireEvent:true,offlineReason:null,async:false};if(!that.ping(localPingArgs)){offlineReason=localPingArgs.offlineReason;setRestApplicationIsOnline(false)}else{setRestApplicationIsOnline(true)}}}if(wasOnline&&!this.connected){this.trigger("offline",this,offlineReason,request)}else if(!wasOnline&&this.connected){this.trigger("online",this,request)}};this._processPingResult=function(args){var xhr=args.xhr,pingResponseJSON,appServerStatus=null,wasOnline=this.connected,connectedBeforeCallback,assumeOepingFormat;if(args.hasOwnProperty("usingOepingFormat")){assumeOepingFormat=args.usingOepingFormat}else{assumeOepingFormat=oepingAvailable}if(xhr.status>=200&&xhr.status<300){updateContextPropsFromResponse(this,xhr);if(assumeOepingFormat){try{pingResponseJSON=JSON.parse(xhr.responseText);appServerStatus=pingResponseJSON.AppServerStatus}catch(e){console.error("Unable to parse ping response.")}}toggleOnlineState(xhr)}else{if(deviceIsOnline){if(xhr.status===0){args.offlineReason=progress.data.Session.SERVER_OFFLINE;setRestApplicationIsOnline(false)}else if(xhr.status===404||xhr.status===410){args.offlineReason=progress.data.Session.WEB_APPLICATION_OFFLINE;setRestApplicationIsOnline(false)}else{setRestApplicationIsOnline(true)}}else{args.offlineReason=progress.data.Session.DEVICE_OFFLINE}}if(appServerStatus){if(appServerStatus.PingStatus==="false"){args.offlineReason=progress.data.Session.APPSERVER_OFFLINE;setRestApplicationIsOnline(false)}else{setRestApplicationIsOnline(true)}}connectedBeforeCallback=this.connected;if(typeof xhr.onCompleteFn==="function"){xhr.onCompleteFn({pingResult:this.connected,xhr:xhr,offlineReason:args.offlineReason})}if(args.fireEventIfOfflineChange){if(wasOnline&&!connectedBeforeCallback){that.trigger("offline",that,args.offlineReason,null)}else if(!wasOnline&&connectedBeforeCallback){that.trigger("online",that,null)}}return this.connected};this._onReadyStateChangePing=function(){var xhr=this;var args;if(xhr.readyState===4){args={xhr:xhr,fireEventIfOfflineChange:true,offlineReason:null};that._processPingResult(args);if(_pingInterval>0){_timeoutID=setTimeout(that._autoping,_pingInterval)}}};this._pingtestOnReadyStateChange=function(){var xhr=this;if(xhr.readyState===4){var foundOeping=false;if(xhr.status>=200&&xhr.status<300){foundOeping=true}else{setPartialPingURI(that.loginTarget);console.warn("Default ping target not available, will use loginTarget instead.")}setOepingAvailable(foundOeping);if(_pingInterval>0){_timeoutID=setTimeout(that._autoping,_pingInterval)}}};this._sendPing=function(args){var xhr=new XMLHttpRequest,that=this;function sendPingAfterOpen(){if(args.async){xhr.onreadystatechange=args.onReadyStateFn;xhr.onCompleteFn=args.onCompleteFn;xhr._jsdosession=jsdosession;xhr._deferred=args.deferred}progress.data.Session._setNoCacheHeaders(xhr);setRequestHeaderFromContextProps(that,xhr);if(that.authenticationModel===progress.data.Session.AUTH_TYPE_FORM){_addWithCredentialsAndAccept(xhr,"application/json,text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")}xhr.send(null)}try{if(this._authProvider){this._authProvider._openRequestAndAuthorize(xhr,"GET",args.pingURI,args.async,sendPingAfterOpen)}else{this._setXHRCredentials(xhr,"GET",args.pingURI,this.userName,_password,args.async);if(xhr.readyState===1){sendPingAfterOpen()}}}catch(e){args.error=e}args.xhr=xhr};this._makePingURI=function(){var pingURI=this.serviceURI+partialPingURI;if(progress.data.Session._useTimeStamp){pingURI=progress.data.Session._addTimeStampToURL(pingURI)}return pingURI};this._autoping=function(){that.ping({async:true})};this._setXHRCredentials=function(xhr,verb,uri,userName,password,async){if(userName&&this.authenticationModel===progress.data.Session.AUTH_TYPE_BASIC){if(canPassCredentialsToOpen()){xhr.open(verb,uri,async,userName,password)}else{xhr.open(verb,uri,async)}var auth=_make_basic_auth(userName,password);xhr.setRequestHeader("Authorization",auth)}else{xhr.open(verb,uri,async)}};this._addCCIDtoURL=function(url){var urlPart1,urlPart2,jsessionidStr,index;if(this.clientContextId&&this.clientContextId!=="0"){if(url.substring(0,this.serviceURI.length)===this.serviceURI){jsessionidStr=";"+"JSESSIONID="+this.clientContextId;index=url.indexOf("?");if(index===-1){url+=jsessionidStr}else{urlPart1=url.substring(0,index);urlPart2=url.substring(index);url=urlPart1+jsessionidStr+urlPart2}}}return url};this._saveClientContextId=function(xhr){setClientContextIDfromXHR(xhr,this)};this._parseCatalog=function(xhr){var jsonObject;var catalogdata;try{jsonObject=JSON.parse(xhr.responseText);catalogdata=jsonObject.services}catch(e){console.error("Unable to parse response. Make sure catalog has correct format.");catalogdata=null}return catalogdata};this._prependAppURL=function(oldURL){if(!oldURL){return this.serviceURI}var newURL=oldURL;var pat=/^https?:\/\//i;if(!pat.test(newURL)){if(newURL.indexOf("/")!==0){newURL="/"+newURL}newURL=this.serviceURI+newURL}return newURL};function _addWithCredentialsAndAccept(xhr,acceptString){try{xhr.withCredentials=true;xhr.setRequestHeader("Accept",acceptString)}catch(e){}}function _make_basic_auth(user,pw){var tok=user+":"+pw;var hash=btoa(tok);return"Basic "+hash}var loginFormIDString="j_spring_security_check";function _gotLoginForm(xhr){return _findStringInResponseHTML(xhr,loginFormIDString)}var loginFailureIdentificationString="login failed";function _gotLoginFailure(xhr){return _findStringInResponseHTML(xhr,loginFailureIdentificationString)}function _findStringInResponseHTML(xhr,searchString){if(!xhr.responseText){return false}var contentType=xhr.getResponseHeader("Content-Type");if(contentType&&contentType.indexOf("text/html")>=0&&xhr.responseText.indexOf(searchString)>=0){return true}return false}function handleJSONLoginResponse(params){var jsonObject;params.statusFromjson=null;try{jsonObject=JSON.parse(params.xhr.responseText);if(jsonObject.status_code!==undefined&&jsonObject.status_txt!==undefined){params.statusFromjson=jsonObject.status_code}}catch(e){setLoginResult(progress.data.Session.LOGIN_GENERAL_FAILURE,params.session);setLoginHttpStatus(params.xhr.status,params.session);throw new Error("Unable to parse login response from server.")}}function setRequestHeaderFromContextProps(session,xhr){if(session.xClientProps){xhr.setRequestHeader("X-CLIENT-PROPS",session.xClientProps)}else if(session._contextProperties.contextHeader!==undefined){xhr.setRequestHeader("X-CLIENT-PROPS",session._contextProperties.contextHeader)}}function toggleOnlineState(xhr){var pdsession=that;setLoginHttpStatus(xhr.status,pdsession);if(pdsession.loginHttpStatus>=200&&pdsession.loginHttpStatus<400){setLoginResult(progress.data.Session.LOGIN_SUCCESS,pdsession);setRestApplicationIsOnline(true);pdsession._saveClientContextId(xhr);storeAllSessionInfo()}else{if(pdsession.loginHttpStatus===0||pdsession.loginHttpStatus===400||pdsession.loginHttpStatus===410){setRestApplicationIsOnline(false);setLoginResult(progress.data.AuthenticationProvider._getAuthFailureReason(xhr),pdsession)}else{setRestApplicationIsOnline(true);setLoginResult(progress.data.Session.LOGIN_GENERAL_FAILURE,pdsession)}}setLastSessionXHR(xhr,pdsession);updateContextPropsFromResponse(pdsession,xhr);return pdsession.loginResult}function updateContextPropsFromResponse(session,xhr){var contextString,context;if(xhr){contextString=getResponseHeaderNoError(xhr,"X-CLIENT-PROPS");if(contextString){try{context=JSON.parse(contextString)}catch(e){}if(typeof context==="object"){session._contextProperties.setContext(context)}else{throw new Error(progress.data._getMsgText("jsdoMSG123","Session","X-CLIENT-PROPS"))}}else if(contextString===""){session._contextProperties.setContext({})}}}function cleanServicesManager(){progress.data.ServicesManager.cleanSession(that)}if(typeof options==="object"){jsdosession=options.jsdosession;newURI=options.serviceURI;setAuthProvider(options.authProvider);if(options.authProvider&&options.authProvider.hasClientCredentials()){_loginResult=progress.data.Session.LOGIN_SUCCESS}if(newURI&&newURI[newURI.length-1]==="/"){newURI=newURI.substring(0,newURI.length-1)}_storageKey=options._storageKey;if(_storageKey){if(retrieveSessionInfo(_storageKey)){storedAuthModel=retrieveSessionInfo("authenticationModel");storedURI=retrieveSessionInfo("serviceURI");if(storedAuthModel!==options.authenticationModel||storedURI!==newURI){clearAllSessionInfo()}else{setSessionInfoFromStorage(_storageKey);stateWasReadFromStorage=true}}if(options.authenticationModel===progress.data.Session.AUTH_TYPE_BASIC){_storageKey=undefined}}if(!stateWasReadFromStorage){if(newURI){setServiceURI(newURI,this)}if(options.authenticationModel){this.authenticationModel=options.authenticationModel}}}};progress.data.Session._useTimeStamp=true;var SEQ_MAX_VALUE=999999999999999;var _tsseq=SEQ_MAX_VALUE;var _tsprefix1=0;var _tsprefix2=0;progress.data.Session._getNextTimeStamp=function(){var seq;_tsseq+=1;seq=_tsseq;if(seq>=SEQ_MAX_VALUE){_tsseq=1;seq=1;var t=Math.floor((Date.now?Date.now():(new Date).getTime())/1e4);if(_tsprefix1===t){_tsprefix2+=1;if(_tsprefix2>=SEQ_MAX_VALUE){_tsprefix2=1}}else{_tsprefix1=t;Math.random();_tsprefix2=Math.round(Math.random()*1e10)}}return _tsprefix1+"-"+_tsprefix2+"-"+seq};progress.data.Session._addTimeStampToURL=function(url){var timeStamp="_ts="+progress.data.Session._getNextTimeStamp();url+=(url.indexOf("?")===-1?"?":"&")+timeStamp;return url};progress.data.Session._setNoCacheHeaders=function(xhr){xhr.setRequestHeader("Cache-Control","no-cache");xhr.setRequestHeader("Pragma","no-cache")};if(typeof Object.defineProperty==="function"){Object.defineProperty(progress.data.Session,"LOGIN_AUTHENTICATION_REQUIRED",{value:0,enumerable:true});Object.defineProperty(progress.data.Session,"LOGIN_SUCCESS",{value:1,enumerable:true});Object.defineProperty(progress.data.Session,"LOGIN_AUTHENTICATION_FAILURE",{value:2,enumerable:true});Object.defineProperty(progress.data.Session,"LOGIN_GENERAL_FAILURE",{value:3,enumerable:true});Object.defineProperty(progress.data.Session,"CATALOG_ALREADY_LOADED",{value:4,enumerable:true});Object.defineProperty(progress.data.Session,"ASYNC_PENDING",{value:5,enumerable:true});Object.defineProperty(progress.data.Session,"EXPIRED_TOKEN",{value:6,enumerable:true});Object.defineProperty(progress.data.Session,"SUCCESS",{value:1,enumerable:true});Object.defineProperty(progress.data.Session,"AUTHENTICATION_FAILURE",{value:2,enumerable:true});Object.defineProperty(progress.data.Session,"GENERAL_FAILURE",{value:3,enumerable:true});Object.defineProperty(progress.data.Session,"AUTH_TYPE_ANON",{value:"anonymous",enumerable:true});Object.defineProperty(progress.data.Session,"AUTH_TYPE_BASIC",{value:"basic",enumerable:true});Object.defineProperty(progress.data.Session,"AUTH_TYPE_FORM",{value:"form",enumerable:true});Object.defineProperty(progress.data.Session,"AUTH_TYPE_SSO",{value:"sso",enumerable:true});Object.defineProperty(progress.data.Session,"AUTH_TYPE_FORM_SSO",{value:"form_sso",enumerable:true});Object.defineProperty(progress.data.Session,"DEVICE_OFFLINE",{value:"Device is offline",enumerable:true});Object.defineProperty(progress.data.Session,"SERVER_OFFLINE",{value:"Cannot contact server",enumerable:true});Object.defineProperty(progress.data.Session,"WEB_APPLICATION_OFFLINE",{value:"Mobile Web Application is not available",enumerable:true});Object.defineProperty(progress.data.Session,"SERVICE_OFFLINE",{value:"REST web Service is not available",enumerable:true});Object.defineProperty(progress.data.Session,"APPSERVER_OFFLINE",{value:"AppServer is not available",enumerable:true})}else{progress.data.Session.LOGIN_SUCCESS=1;progress.data.Session.LOGIN_AUTHENTICATION_FAILURE=2;progress.data.Session.LOGIN_GENERAL_FAILURE=3;progress.data.Session.CATALOG_ALREADY_LOADED=4;progress.data.Session.SUCCESS=1;progress.data.Session.AUTHENTICATION_FAILURE=2;progress.data.Session.GENERAL_FAILURE=3;progress.data.Session.AUTH_TYPE_ANON="anonymous";progress.data.Session.AUTH_TYPE_BASIC="basic";progress.data.Session.AUTH_TYPE_FORM="form";progress.data.Session.AUTH_TYPE_SSO="sso"}progress.data.Session.prototype=new progress.util.Observable;progress.data.Session.prototype.constructor=progress.data.Session;function validateSessionSubscribe(args,evt,listenerData){listenerData.operation=undefined;var found=false;this._eventNames.forEach(function(eventName){if(evt===eventName.toLowerCase()){found=true}});if(!found){throw new Error(progress.data._getMsgText("jsdoMSG042",evt))}if(args.length<2){throw new Error(progress.data._getMsgText("jsdoMSG038",2))}if(typeof args[0]!=="string"){throw new Error(progress.data._getMsgText("jsdoMSG039"))}if(typeof args[1]!=="function"){throw new Error(progress.data._getMsgText("jsdoMSG040"))}listenerData.fn=args[1];if(args.length>2){if(typeof args[2]!=="object"){throw new Error(progress.data._getMsgText("jsdoMSG041",evt))}else{listenerData.scope=args[2]}}}progress.data.Session.prototype._eventNames=["offline","online","afterLogin","afterAddCatalog","afterLogout","afterDisconnect"];progress.data.Session.prototype.validateSubscribe=validateSessionSubscribe;progress.data.Session.prototype.toString=function(radix){return"progress.data.Session"};progress.data.JSDOSession=function JSDOSession(options){var _pdsession,_serviceURI,that=this,_name;Object.defineProperty(this,"authenticationModel",{get:function(){return _pdsession?_pdsession.authenticationModel:undefined},enumerable:true});Object.defineProperty(this,"authProvider",{get:function(){return _pdsession?_pdsession._authProvider:null},enumerable:true});Object.defineProperty(this,"catalogURIs",{get:function(){return _pdsession?_pdsession.catalogURIs:undefined},enumerable:true});Object.defineProperty(this,"clientContextId",{get:function(){return _pdsession?_pdsession.clientContextId:undefined},enumerable:true});Object.defineProperty(this,"connected",{get:function(){return _pdsession?_pdsession.connected:undefined},enumerable:true});Object.defineProperty(this,"JSDOs",{get:function(){return _pdsession?_pdsession.JSDOs:undefined},enumerable:true});Object.defineProperty(this,"loginResult",{get:function(){return _pdsession?_pdsession.loginResult:undefined},enumerable:true});Object.defineProperty(this,"loginHttpStatus",{get:function(){return _pdsession?_pdsession.loginHttpStatus:undefined},enumerable:true});Object.defineProperty(this,"onOpenRequest",{get:function(){return _pdsession?_pdsession.onOpenRequest:undefined},set:function(newval){if(_pdsession){_pdsession.onOpenRequest=newval}},enumerable:true});Object.defineProperty(this,"pingInterval",{get:function(){return _pdsession?_pdsession.pingInterval:undefined},set:function(newval){if(_pdsession){_pdsession.pingInterval=newval}},enumerable:true});Object.defineProperty(this,"services",{get:function(){return _pdsession?_pdsession.services:undefined},enumerable:true});Object.defineProperty(this,"serviceURI",{get:function(){if(_pdsession&&_pdsession.serviceURI){return _pdsession.serviceURI}else{return _serviceURI}},enumerable:true});Object.defineProperty(this,"userName",{get:function(){return _pdsession?_pdsession.userName:undefined},enumerable:true});Object.defineProperty(this,"name",{get:function(){return _name},enumerable:true});Object.defineProperty(this,"_isInvalidated",{get:function(){return _pdsession._isInvalidated},enumerable:false});function settlePromise(promise,fulfill,result,info){if(fulfill){promise.resolve(that,result,info)}else{promise.reject(that,result,info)}}function genericSessionEventHandler(pdsession,result,errorObject,xhr,deferred){var myDeferred;if(xhr){myDeferred=xhr._deferred}else{myDeferred=deferred}settlePromise(myDeferred,result===progress.data.Session.SUCCESS?true:false,result,{errorObject:errorObject,xhr:xhr})}function onAfterAddCatalog(pdsession,result,errorObject,xhr){var deferred,fulfill=false,settleResult,info;if(result===progress.data.Session.EXPIRED_TOKEN){settleResult=progress.data.Session.EXPIRED_TOKEN}else if(result===progress.data.Session.LOGIN_AUTHENTICATION_FAILURE){settleResult=progress.data.Session.LOGIN_AUTHENTICATION_FAILURE}else{settleResult=progress.data.Session.GENERAL_FAILURE}if(xhr&&xhr._deferred){deferred=xhr._deferred;if(result!==progress.data.Session.SUCCESS&&result!==progress.data.Session.CATALOG_ALREADY_LOADED){result=result||progress.data.Session.GENERAL_FAILURE;deferred._overallCatalogResult=progress.data.Session.GENERAL_FAILURE}deferred._results[xhr._catalogIndex]={catalogURI:xhr._catalogURI,result:result,errorObject:errorObject,xhr:xhr};deferred._numCatalogsProcessed+=1;if(deferred._numCatalogsProcessed===deferred._numCatalogs){deferred._processedPromise=true;if(!deferred._overallCatalogResult){fulfill=true;settleResult=progress.data.Session.SUCCESS}if(settleResult===progress.data.Session.SUCCESS){if(xhr._deferred._results.length===1){info=xhr._deferred._results[0]}else{info={xhr:xhr,result:settleResult,details:xhr._deferred._results}}}else{if(xhr._deferred._results.length===1){info=xhr._deferred._results[0]}else{info={xhr:xhr,result:settleResult,errorObject:new Error(progress.data._getMsgText("jsdoMSG512")),details:xhr._deferred._results}}}settlePromise(xhr._deferred,fulfill,settleResult,info)}}}function onAfterLogout(pdsession,errorObject,xhr){var result=progress.data.Session.GENERAL_FAILURE,fulfill=false;if(xhr&&xhr._deferred){if(!errorObject&&!pdsession.loginResult){result=progress.data.Session.SUCCESS;fulfill=true}settlePromise(xhr._deferred,fulfill,result,{errorObject:errorObject,xhr:xhr})}}function onPingComplete(args){var xhr=args.xhr;if(xhr&&xhr._deferred){settlePromise(xhr._deferred,args.pingResult,args.pingResult,{offlineReason:args.offlineReason,xhr:xhr})}}this.login=function(username,password,options){var deferred=new progress.util.Deferred,iOSBasicAuthTimeout;function callIsAuthorized(){that.isAuthorized().then(function(object,result,info){object=progress.util.Deferred.getParamObject(object,result,info);deferred.resolve(that,object.result,object.info)},function(object,result,info){object=progress.util.Deferred.getParamObject(object,result,info);deferred.reject(that,object.result,object.info)})}try{if(this._isInvalidated){throw new Error(progress.data._getMsgText("jsdoMSG510","JSDOSession"))}if(this.authenticationModel===progress.data.Session.AUTH_TYPE_SSO){throw new Error(progress.data._getMsgText("jsdoMSG057","JSDOSession","login()"))}if(typeof options==="object"){iOSBasicAuthTimeout=options.iOSBasicAuthTimeout}if(!_pdsession._authProvider){_pdsession._authProvider=new progress.data.AuthenticationProvider({uri:this.serviceURI,authenticationModel:this.authenticationModel});_pdsession._authProvider.logout().then(function(){return _pdsession._authProvider.login(username,password)}).then(function(){callIsAuthorized()},function(object,result,info){object=progress.util.Deferred.getParamObject(object,result,info);deferred.reject(that,object.result,object.info)})}else{throw new Error(progress.data._getMsgText("jsdoMSG062","JSDOSession","login()"))}}catch(error){if(progress.util.Deferred.useJQueryPromises){throw error}else{deferred.reject(this,progress.data.Session.GENERAL_FAILURE,{errorObject:error})}}return deferred.promise()};this.disconnect=function(){var deferred=new progress.util.Deferred,errorObject;try{_pdsession.subscribe("afterDisconnect",genericSessionEventHandler,this);_pdsession._disconnect(deferred)}catch(e){errorObject=new Error(progress.data._getMsgText("jsdoMSG049","JSDOSession","disconnect",e.message))}if(errorObject){if(progress.util.Deferred.useJQueryPromises){throw errorObject}else{deferred.reject(this,progress.data.Session.GENERAL_FAILURE,{errorObject:errorObject})}}else{return deferred.promise()}};this.addCatalog=function(catalogURI,unameOrOpts,password,opts){var deferred=new progress.util.Deferred,catalogURIs,numCatalogs,catalogIndex,addResult,errorObject,iOSBasicAuthTimeout,username,options,authProvider;try{if(this._isInvalidated){throw new Error(progress.data._getMsgText("jsdoMSG510","JSDOSession"))}if(typeof catalogURI==="string"){catalogURIs=[catalogURI]}else if(catalogURI instanceof Array){catalogURIs=catalogURI}else{throw new Error(progress.data._getMsgText("jsdoMSG033","JSDOSession","addCatalog","The first argument must be a string or an array of strings specifying the URI of the catalog."))}if(unameOrOpts){if(typeof unameOrOpts==="string"){if(this.authenticationModel===progress.data.Session.AUTH_TYPE_SSO){throw new Error(progress.data._getMsgText("jsdoMSG058","Session"))}username=unameOrOpts;if(opts){options=opts;options.authProvider=undefined}}else if(typeof unameOrOpts==="object"){options=unameOrOpts}else{throw new Error(progress.data._getMsgText("jsdoMSG121","JSDOSession","2","object","addCatalog"))}}if(typeof options==="object"){iOSBasicAuthTimeout=options.iOSBasicAuthTimeout;if(options.authProvider){authProvider=options.authProvider}else if(this.authProvider){authProvider=this.authProvider}}if(!authProvider&&!this.authProvider&&!username){throw new Error(progress.data._getMsgText("jsdoMSG511"))}_pdsession.subscribe("afterAddCatalog",onAfterAddCatalog,this);numCatalogs=catalogURIs.length;deferred._numCatalogs=numCatalogs;deferred._numCatalogsProcessed=0;deferred._results=[];deferred._results.length=numCatalogs;for(catalogIndex=0;catalogIndex=200&&xhr.status<300){deferred.resolve(that,progress.data.Session.SUCCESS,info)}else{if(xhr.status===401){cbresult=progress.data.AuthenticationProvider._getAuthFailureReason(xhr)}else{cbresult=progress.data.Session.GENERAL_FAILURE}deferred.reject(that,cbresult,info)}}};try{xhr.send()}catch(e){throw new Error("JSDOSession: Unable to validate authorization. "+e.message)}})}else{result=progress.data.Session.LOGIN_AUTHENTICATION_REQUIRED;deferred.reject(that,result,{xhr:xhr})}}catch(error){if(progress.util.Deferred.useJQueryPromises){throw error}else{deferred.reject(that,progress.data.Session.GENERAL_FAILURE,{errorObject:error})}}return deferred.promise()};this.setContext=function(context){_pdsession._contextProperties.setContext(context)};this.setContextProperty=function(propertyName,propertyValue){_pdsession._contextProperties.setContextProperty(propertyName,propertyValue)};this.getContext=function(){return _pdsession._contextProperties.getContext()};this.getContextProperty=function(propertyName){return _pdsession._contextProperties.getContextProperty(propertyName)};this._onlineHandler=function(session,request){that.trigger("online",that,request)};this._offlineHandler=function(session,offlineReason,request){that.trigger("offline",that,offlineReason,request)};if(arguments.length>0&&typeof arguments[0]==="object"){if(options.serviceURI&&typeof options.serviceURI==="string"){_serviceURI=options.serviceURI}else{throw new Error(progress.data._getMsgText("jsdoMSG033","JSDOSession","the constructor","The options parameter must include a 'serviceURI' property that is a string."))}if(options.authenticationModel){if(typeof options.authenticationModel!=="string"){throw new Error(progress.data._getMsgText("jsdoMSG033","JSDOSession","the constructor","The authenticationModel property of the options parameter must be a string."))}options.authenticationModel=options.authenticationModel.toLowerCase()}else{options.authenticationModel=progress.data.Session.AUTH_TYPE_ANON}if(options.authProvider){if(typeof options.authProvider!=="object"){throw new Error(progress.data._getMsgText("jsdoMSG502","JSDOSession","options","constructor","authProvider"))}if(options.authProvider.authenticationModel!==progress.data.Session.AUTH_TYPE_FORM_SSO&&options.authProvider.authenticationModel!==options.authenticationModel||options.authProvider.authenticationModel===progress.data.Session.AUTH_TYPE_FORM_SSO&&options.authenticationModel!==progress.data.Session.AUTH_TYPE_SSO){throw new Error(progress.data._getMsgText("jsdoMSG059","JSDOSession",options.authProvider.authenticationModel,options.authenticationModel))}if(typeof options.authProvider.hasClientCredentials==="function"){if(!options.authProvider.hasClientCredentials()){throw new Error(progress.data._getMsgText("jsdoMSG125","JSDOSession"))}}else{throw new Error(progress.data._getMsgText("jsdoMSG505","JSDOSession","AuthenticationProvider","hasClientCredentials"))}}else if(options.authenticationModel===progress.data.Session.AUTH_TYPE_SSO){throw new Error(progress.data._getMsgText("jsdoMSG508"))}}else{throw new Error(progress.data._getMsgText("jsdoMSG033","JSDOSession","the constructor","The options argument was missing or invalid."))}_name=options.name;_pdsession=new progress.data.Session({_storageKey:_name,_silent:true,authenticationModel:options.authenticationModel,serviceURI:options.serviceURI,jsdosession:this,authProvider:options.authProvider});try{if(options.context){this.setContext(options.context)}_pdsession.subscribe("online",this._onlineHandler,this);_pdsession.subscribe("offline",this._offlineHandler,this)}catch(err){_pdsession=undefined;throw err}};progress.data.JSDOSession.prototype=new progress.util.Observable;progress.data.JSDOSession.prototype.constructor=progress.data.JSDOSession;function validateJSDOSessionSubscribe(args,evt,listenerData){listenerData.operation=undefined;var found=false;this._eventNames.forEach(function(eventName){if(evt===eventName.toLowerCase()){found=true}});if(!found){throw new Error(progress.data._getMsgText("jsdoMSG042",evt))}if(args.length<2){throw new Error(progress.data._getMsgText("jsdoMSG038",2))}if(typeof args[0]!=="string"){throw new Error(progress.data._getMsgText("jsdoMSG039"))}if(typeof args[1]!=="function"){throw new Error(progress.data._getMsgText("jsdoMSG040"))}listenerData.fn=args[1];if(args.length>2){if(typeof args[2]!=="object"){throw new Error(progress.data._getMsgText("jsdoMSG041",evt))}listenerData.scope=args[2]}}progress.data.JSDOSession.prototype._eventNames=["offline","online"];progress.data.JSDOSession.prototype.validateSubscribe=validateJSDOSessionSubscribe;progress.data.JSDOSession.prototype.toString=function(radix){return"progress.data.JSDOSession"};progress.data.getSession=function(options){var deferred=new progress.util.Deferred,authProvider,promise,authProviderInitObject={};function sessionRejectHandler(object,result,info){object=progress.util.Deferred.getParamObject(object,result,info);if(authProvider&&authProvider.hasClientCredentials()){var callback=function(){deferred.reject(object.result,object.info)};authProvider.logout().then(callback,callback)}else{deferred.reject(object.result,object.info)}}function callbackRejectHandler(reason){deferred.reject(progress.data.Session.GENERAL_FAILURE,{reason:reason})}function loginHandler(object){var jsdosession;try{jsdosession=new progress.data.JSDOSession(options);try{jsdosession.isAuthorized().then(function(){return jsdosession.addCatalog(options.catalogURI)},sessionRejectHandler).then(function(object,result,info){object=progress.util.Deferred.getParamObject(object,result,info);deferred.resolve(object.jsdosession,progress.data.Session.SUCCESS)},sessionRejectHandler)}catch(e){sessionRejectHandler(jsdosession,progress.data.Session.GENERAL_FAILURE,{errorObject:e})}}catch(ex){sessionRejectHandler(jsdosession,progress.data.Session.GENERAL_FAILURE,{errorObject:ex})}}function callLogin(provider){var errorObject;if(typeof options.loginCallback!=="undefined"){options.loginCallback().then(function(result){try{provider.login(result.username,result.password).then(loginHandler,sessionRejectHandler)}catch(e){sessionRejectHandler(provider,progress.data.Session.GENERAL_FAILURE,{errorObject:e})}},callbackRejectHandler)}else if(options.username&&options.password){try{provider.login(options.username,options.password).then(loginHandler,sessionRejectHandler)}catch(e){sessionRejectHandler(provider,progress.data.Session.GENERAL_FAILURE,{errorObject:e})}}else{errorObject=new Error(progress.data._getMsgText("jsdoMSG052","getSession()"));sessionRejectHandler(provider,progress.data.Session.AUTHENTICATION_FAILURE,{errorObject:errorObject})}}if(typeof options!=="object"){throw new Error(progress.data._getMsgText("jsdoMSG503","getSession()","options","object"))}if(typeof options.loginCallback!=="undefined"&&typeof options.loginCallback!=="function"){throw new Error(progress.data._getMsgText("jsdoMSG503","getSession()","options.loginCallback","function"))}try{if(options.authenticationModel===progress.data.Session.AUTH_TYPE_SSO){if(!options.authenticationURI||!options.authProviderAuthenticationModel){throw new Error(progress.data._getMsgText("jsdoMSG509"))}}if(options.authenticationURI){authProviderInitObject.uri=options.authenticationURI;authProviderInitObject.authenticationModel=options.authProviderAuthenticationModel;if(typeof authProviderInitObject.authenticationModel!=="string"){throw new Error(progress.data._getMsgText("jsdoMSG502","progress.data.getSession","object","getSession","authProviderAuthenticationModel"))}}else{authProviderInitObject.uri=options.serviceURI;authProviderInitObject.authenticationModel=options.authenticationModel}authProvider=new progress.data.AuthenticationProvider(authProviderInitObject);options.authProvider=authProvider;if(authProvider.hasClientCredentials()){loginHandler(authProvider)}else{if(authProvider.authenticationModel===progress.data.Session.AUTH_TYPE_ANON){authProvider.login().then(loginHandler,sessionRejectHandler)}else{callLogin(authProvider)}}}catch(error){sessionRejectHandler(null,progress.data.Session.GENERAL_FAILURE,{errorObject:error})}return deferred.promise()};progress.data.invalidateAllSessions=function(){var jsdosession,key,deferred=new progress.util.Deferred,jsdosessions=progress.data.ServicesManager._jsdosessions,invalidatePromises=[];try{for(key in jsdosessions){if(jsdosessions.hasOwnProperty(key)){jsdosession=jsdosessions[key];invalidatePromises.push(jsdosession.invalidate())}}progress.util.Deferred.when(invalidatePromises).then(function(){deferred.resolve(progress.data.Session.SUCCESS)},function(object,result,info){object=progress.util.Deferred.getParamObject(object,result,info);deferred.reject(progress.data.Session.GENERAL_FAILURE,info)})}catch(error){if(progress.util.Deferred.useJQueryPromises){throw error}else{deferred.reject(progress.data.Session.GENERAL_FAILURE,{errorObject:error})}}return deferred.promise()}})();if(typeof exports!=="undefined"){exports.progress=progress}(function(){"use strict";if(typeof progress==="undefined"){progress={}}if(typeof progress.data==="undefined"){progress.data={}}progress.data.AuthenticationProvider=function AuthenticationProvider(initObject){var authProv,authModel,uri;if(typeof initObject==="object"){this._checkStringArg("constructor",initObject.authenticationModel,"initObject.authenticationModel","initObject.authenticationModel");this._checkStringArg("constructor",initObject.uri,"init-object.uri","init-object.uri")}else{throw new Error(progress.data._getMsgText("jsdoMSG033","AuthenticationProvider","the constructor","The init-object argument was missing or invalid."))}authModel=initObject.authenticationModel.toLowerCase();switch(authModel){case progress.data.Session.AUTH_TYPE_ANON:this._initialize(initObject.uri,progress.data.Session.AUTH_TYPE_ANON,{_loginURI:progress.data.AuthenticationProvider._homeLoginURIBase});authProv=this;break;case progress.data.Session.AUTH_TYPE_BASIC:authProv=new progress.data.AuthenticationProviderBasic(initObject.uri);break;case progress.data.Session.AUTH_TYPE_FORM:authProv=new progress.data.AuthenticationProviderForm(initObject.uri);break;case progress.data.Session.AUTH_TYPE_FORM_SSO:authProv=new progress.data.AuthenticationProviderSSO(initObject.uri);break;default:throw new Error(progress.data._getMsgText("jsdoMSG502","AuthenticationProvider","init-object","constructor","authenticationModel"))}return authProv};progress.data.AuthenticationProvider.prototype._loginProto=function(sendParam){var deferred=new progress.util.Deferred,xhr,uriForRequest,header,that=this;try{if(this._loggedIn){throw new Error(progress.data._getMsgText("jsdoMSG051","AuthenticationProvider"))}xhr=new XMLHttpRequest;xhr.onreadystatechange=function(){if(xhr.readyState===4){that._processLoginResult(xhr,deferred)}};if(progress.data.Session._useTimeStamp){uriForRequest=progress.data.Session._addTimeStampToURL(this._loginURI)}else{uriForRequest=this._loginURI}this._openLoginRequest(xhr,uriForRequest);xhr.setRequestHeader("Accept","application/json");xhr.send(sendParam)}catch(error){if(progress.util.Deferred.useJQueryPromises){throw error}else{deferred.reject(this,progress.data.Session.GENERAL_FAILURE,{errorObject:error})}}return deferred.promise()};progress.data.AuthenticationProvider.prototype.login=function(){return this._loginProto()};progress.data.AuthenticationProvider.prototype._openLoginRequest=function(xhr,uri){xhr.open("GET",uri,true);progress.data.Session._setNoCacheHeaders(xhr)};progress.data.AuthenticationProvider.prototype._processLoginResult=function(xhr,deferred){var result;if(xhr.status===200){this._loggedIn=true;this._storeInfo();result=progress.data.Session.SUCCESS}else if(xhr.status===401){result=progress.data.Session.AUTHENTICATION_FAILURE}else{result=progress.data.Session.GENERAL_FAILURE}this._settlePromise(deferred,result,{xhr:xhr})};progress.data.AuthenticationProvider.prototype.logout=function(){var deferred=new progress.util.Deferred;try{this._reset();deferred.resolve(this,progress.data.Session.SUCCESS,{})}catch(error){if(progress.util.Deferred.useJQueryPromises){throw error}else{deferred.reject(this,progress.data.Session.GENERAL_FAILURE,{errorObject:error})}}return deferred.promise()};progress.data.AuthenticationProvider.prototype.hasClientCredentials=function(){return this._loggedIn};progress.data.AuthenticationProvider.prototype.hasRefreshToken=function(){return false};progress.data.AuthenticationProvider.prototype._openRequestAndAuthorize=function(xhr,verb,uri,async,callback){var errorObject;if(this.hasClientCredentials()){xhr.open(verb,uri,async);xhr.setRequestHeader("Accept","application/json");callback(xhr)}else{errorObject=new Error(progress.data._getMsgText("jsdoMSG125","AuthenticationProvider"));callback(errorObject)}};progress.data.AuthenticationProvider.prototype._initialize=function(uriParam,authModel,targetURIs){var tempURI,target;Object.defineProperty(this,"uri",{get:function(){return this._uri},enumerable:true});Object.defineProperty(this,"authenticationModel",{get:function(){return this._authenticationModel},enumerable:true});if(uriParam[uriParam.length-1]==="/"){tempURI=uriParam.substring(0,uriParam.length-1)}else{tempURI=uriParam}for(target in targetURIs){if(targetURIs.hasOwnProperty(target)){this[target]=tempURI+targetURIs[target]}}this._authenticationModel=authModel;this._uri=uriParam;this._loggedIn=false;this._dataKeys={uri:".uri",loggedIn:".loggedIn"};if(typeof sessionStorage==="undefined"){throw new Error(progress.data._getMsgText("jsdoMSG126","AuthenticationProvider","sessionStorage"))}this._storage=sessionStorage;this._storageKey=this._uri;this._dataKeys.uri=this._storageKey+this._dataKeys.uri;this._dataKeys.loggedIn=this._storageKey+this._dataKeys.loggedIn;if(this._retrieveLoggedIn()){this._loggedIn=true}};progress.data.AuthenticationProvider.prototype._storeInfo=function(){this._storage.setItem(this._dataKeys.uri,JSON.stringify(this._uri));this._storage.setItem(this._dataKeys.loggedIn,JSON.stringify(this._loggedIn))};progress.data.AuthenticationProvider.prototype._retrieveInfoItem=function(propName){var jsonStr=this._storage.getItem(propName),value=null;if(jsonStr!==null){try{value=JSON.parse(jsonStr)}catch(e){value=null}}return value};progress.data.AuthenticationProvider.prototype._retrieveURI=function(){return this._retrieveInfoItem(this._dataKeys.uri)};progress.data.AuthenticationProvider.prototype._retrieveLoggedIn=function(){return this._retrieveInfoItem(this._dataKeys.loggedIn)};progress.data.AuthenticationProvider.prototype._clearInfo=function(info){this._storage.removeItem(this._dataKeys.uri);this._storage.removeItem(this._dataKeys.loggedIn)};progress.data.AuthenticationProvider.prototype._reset=function(){this._clearInfo();this._loggedIn=false};progress.data.AuthenticationProvider.prototype._settlePromise=function(deferred,result,info){if(result===progress.data.Session.SUCCESS){deferred.resolve(this,result,info)}else{deferred.reject(this,result,info)}};progress.data.AuthenticationProvider.prototype._checkStringArg=function(fnName,argToCheck,argPosition,argName){if(typeof argToCheck!=="string"){throw new Error(progress.data._getMsgText("jsdoMSG121","AuthenticationProvider",argPosition,"string",fnName))}else if(argToCheck.length===0){throw new Error(progress.data._getMsgText("jsdoMSG501","AuthenticationProvider",argName,fnName))}};progress.data.AuthenticationProvider._getAuthFailureReason=function(xhr){var contentType,jsonObject,result=progress.data.Session.AUTHENTICATION_FAILURE;if(xhr.status===401){contentType=xhr.getResponseHeader("Content-Type");if(contentType&&contentType.indexOf("application/json")>-1&&xhr.responseText){jsonObject=JSON.parse(xhr.responseText);if(jsonObject.error==="sso.token.expired_token"){result=progress.data.Session.EXPIRED_TOKEN}}}else{result=null}return result};Object.defineProperty(progress.data.AuthenticationProvider,"_homeLoginURIBase",{value:"/static/home.html",enumerable:true});Object.defineProperty(progress.data.AuthenticationProvider,"_springLoginURIBase",{value:"/static/auth/j_spring_security_check",enumerable:true});Object.defineProperty(progress.data.AuthenticationProvider,"_springLogoutURIBase",{value:"/static/auth/j_spring_security_logout",enumerable:true});Object.defineProperty(progress.data.AuthenticationProvider,"_springFormTokenLoginURIBase",{value:progress.data.AuthenticationProvider._springLoginURIBase+"?OECP=yes",enumerable:true});Object.defineProperty(progress.data.AuthenticationProvider,"_springFormTokenRefreshURIBase",{value:"/static/auth/token?op=refresh",enumerable:true})})();(function(){"use strict";progress.data.AuthenticationProviderBasic=function(uri){var defaultiOSBasicAuthTimeout,userName=null,password=null,fn;this._initialize(uri,progress.data.Session.AUTH_TYPE_BASIC,{_loginURI:progress.data.AuthenticationProvider._homeLoginURIBase});this._reset();function make_basic_auth_header(user,pw){var tok=user+":"+pw,hash=btoa(tok);return"Basic "+hash}this._reset=function(){userName=null;password=null;progress.data.AuthenticationProviderBasic.prototype._reset.apply(this)};this._openLoginRequest=function(xhr,uri){var auth;xhr.open("GET",uri,true);if(userName){auth=make_basic_auth_header(userName,password);xhr.setRequestHeader("Authorization",auth)}progress.data.Session._setNoCacheHeaders(xhr)};this._processLoginResult=function _basic_processLoginResult(xhr,deferred){progress.data.AuthenticationProviderBasic.prototype._processLoginResult.apply(this,[xhr,deferred]);if(!this._loggedIn){userName=null;password=null}};this.login=function(userNameParam,passwordParam){this._checkStringArg("login",userNameParam,1,"userName");this._checkStringArg("login",passwordParam,2,"password");userName=userNameParam;password=passwordParam;return this._loginProto()};this._openRequestAndAuthorize=function(xhr,verb,uri,async,callback){var auth,errorObject;if(this.hasClientCredentials()){xhr.open(verb,uri,async);if(userName){auth=make_basic_auth_header(userName,password);xhr.setRequestHeader("Authorization",auth)}progress.data.Session._setNoCacheHeaders(xhr);callback(xhr)}else{errorObject=new Error(progress.data._getMsgText("jsdoMSG125","AuthenticationProvider"));callback(errorObject)}}};function BasicProxy(){}BasicProxy.prototype=progress.data.AuthenticationProvider.prototype;progress.data.AuthenticationProviderBasic.prototype=new BasicProxy;progress.data.AuthenticationProviderBasic.prototype.constructor=progress.data.AuthenticationProviderBasic})();(function(){"use strict";var fn;progress.data.AuthenticationProviderForm=function(uri){this._initialize(uri,progress.data.Session.AUTH_TYPE_FORM,{_loginURI:progress.data.AuthenticationProvider._springLoginURIBase,_logoutURI:progress.data.AuthenticationProvider._springLogoutURIBase})};function FormProxy(){}FormProxy.prototype=progress.data.AuthenticationProvider.prototype;progress.data.AuthenticationProviderForm.prototype=new FormProxy;progress.data.AuthenticationProviderForm.prototype.constructor=progress.data.AuthenticationProviderForm;progress.data.AuthenticationProviderForm.prototype.login=function(userNameParam,passwordParam){var deferred=new progress.util.Deferred,xhr,that=this;this._checkStringArg("login",userNameParam,1,"userName");this._checkStringArg("login",passwordParam,2,"password");return this._loginProto("j_username="+encodeURIComponent(userNameParam)+"&j_password="+encodeURIComponent(passwordParam)+"&submit=Submit")};progress.data.AuthenticationProviderForm.prototype._openLoginRequest=function(xhr,uri){xhr.open("POST",uri,true);xhr.setRequestHeader("Cache-Control","max-age=0");xhr.setRequestHeader("Pragma","no-cache");xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");xhr.withCredentials=true};progress.data.AuthenticationProviderForm.prototype.logout=function(){var deferred=new progress.util.Deferred,xhr,that=this;try{if(!this._loggedIn){deferred.resolve(this,progress.data.Session.SUCCESS,{})}else{xhr=new XMLHttpRequest;this._openLogoutRequest(xhr);xhr.onreadystatechange=function(){if(xhr.readyState===4){that._processLogoutResult(xhr,deferred)}};xhr.send()}this._reset()}catch(error){if(progress.util.Deferred.useJQueryPromises){throw error}else{deferred.reject(this,progress.data.Session.GENERAL_FAILURE,{errorObject:error})}}return deferred.promise()};progress.data.AuthenticationProviderForm.prototype._openLogoutRequest=function(xhr){xhr.open("GET",this._logoutURI,true);xhr.setRequestHeader("Cache-Control","max-age=0");xhr.withCredentials=true;xhr.setRequestHeader("Accept","application/json")};progress.data.AuthenticationProviderForm.prototype._processLogoutResult=function(xhr,deferred){var result;if(xhr.status===200){result=progress.data.Session.SUCCESS}else if(xhr.status===401){result=progress.data.Session.SUCCESS}else{result=progress.data.Session.GENERAL_FAILURE}this._settlePromise(deferred,result,{xhr:xhr})};fn=progress.data.AuthenticationProviderForm.prototype._openRequestAndAuthorize;progress.data.AuthenticationProviderForm.prototype._openRequestAndAuthorize=function(xhr,verb,uri,async,callback){function afterSuper(errorObject){if(errorObject instanceof Error){callback(errorObject)}else{xhr.withCredentials=true;callback(xhr)}}try{progress.data.AuthenticationProviderForm.prototype._openRequestAndAuthorize._super.apply(this,[xhr,verb,uri,async,afterSuper])}catch(e){callback(e)}};progress.data.AuthenticationProviderForm.prototype._openRequestAndAuthorize._super=fn})();(function(){"use strict";var fn;progress.data.AuthenticationProviderSSO=function(uri){var that=this,_automaticTokenRefresh,temp,ssoTokenInfo=null,tokenDataKeys={token:".access_token",refreshToken:".refresh_token",tokenType:".token_type",expiration:".expires_in",accessTokenExpiration:".accessTokenExpiration"};function storeTokenInfo(info){var date,accessTokenExpiration;if(info.access_token.length){that._storage.setItem(tokenDataKeys.token,JSON.stringify(info.access_token))}if(info.refresh_token.length){that._storage.setItem(tokenDataKeys.refreshToken,JSON.stringify(info.refresh_token));date=new Date;accessTokenExpiration=date.getTime()+info.expires_in*1e3*.75;that._storage.setItem(tokenDataKeys.accessTokenExpiration,JSON.stringify(accessTokenExpiration))}else{that._storage.removeItem(tokenDataKeys.refreshToken);that._storage.removeItem(tokenDataKeys.accessTokenExpiration)}that._storage.setItem(tokenDataKeys.tokenType,JSON.stringify(info.token_type));that._storage.setItem(tokenDataKeys.expiration,JSON.stringify(info.expires_in))}function retrieveTokenProperty(propName){var jsonStr=that._storage.getItem(propName),value=null;if(jsonStr!==null){try{value=JSON.parse(jsonStr)}catch(e){value=null}}return value}function retrieveToken(){return retrieveTokenProperty(tokenDataKeys.token)}function retrieveRefreshToken(){return retrieveTokenProperty(tokenDataKeys.refreshToken)}function retrieveAccessTokenExpiration(){return retrieveTokenProperty(tokenDataKeys.accessTokenExpiration)}function retrieveTokenType(){return retrieveTokenProperty(tokenDataKeys.tokenType)}function getToken(){return retrieveToken()}function retrieveExpiration(){return retrieveTokenProperty(tokenDataKeys.expiration)}function clearTokenInfo(info){that._storage.removeItem(tokenDataKeys.token);that._storage.removeItem(tokenDataKeys.refreshToken);that._storage.removeItem(tokenDataKeys.tokenType);that._storage.removeItem(tokenDataKeys.expiration);that._storage.removeItem(tokenDataKeys.accessTokenExpiration)}function openRefreshRequest(xhr){xhr.open("POST",that._refreshURI,true);xhr.setRequestHeader("Cache-Control","max-age=0");xhr.withCredentials=true;xhr.setRequestHeader("Content-Type","application/json");xhr.setRequestHeader("Accept","application/json")}function processRefreshResult(xhr,deferred){var errorObject,result,ssoTokenJSON;if(xhr.status===200){try{ssoTokenInfo=JSON.parse(xhr.responseText);if(ssoTokenInfo.access_token){storeTokenInfo(ssoTokenInfo);result=progress.data.Session.SUCCESS}else{result=progress.data.Session.GENERAL_FAILURE;errorObject=new Error(progress.data._getMsgText("jsdoMSG049","AuthenticationProvider","refresh",progress.data._getMsgText("jsdoMSG050")))}}catch(ex){result=progress.data.Session.GENERAL_FAILURE;errorObject=new Error(progress.data._getMsgText("jsdoMSG049","AuthenticationProvider","refresh",ex.message))}}else if(xhr.status===401){that._reset();result=progress.data.Session.AUTHENTICATION_FAILURE}else{result=progress.data.Session.GENERAL_FAILURE}that._settlePromise(deferred,result,{xhr:xhr,errorObject:errorObject})}this._processLoginResult=function(xhr,deferred){var errorObject,result,ssoTokenJSON;if(xhr.status===200){this._loggedIn=true;try{ssoTokenInfo=JSON.parse(xhr.responseText);if(ssoTokenInfo.access_token){storeTokenInfo(ssoTokenInfo);result=progress.data.Session.SUCCESS}else{result=progress.data.Session.GENERAL_FAILURE;errorObject=new Error(progress.data._getMsgText("jsdoMSG049","AuthenticationProvider","login",progress.data._getMsgText("jsdoMSG050")))}}catch(ex){result=progress.data.Session.GENERAL_FAILURE;errorObject=new Error(progress.data._getMsgText("jsdoMSG049","AuthenticationProvider","login",ex.message))}if(result!==progress.data.Session.SUCCESS){var callback=function(params){params=progress.util.Deferred.getParamObject(params);params.provider._settlePromise(deferred,result,{xhr:xhr,errorObject:errorObject})};this.logout().then(callback,callback);return}}else if(xhr.status===401){result=progress.data.Session.AUTHENTICATION_FAILURE}else{result=progress.data.Session.GENERAL_FAILURE}this._settlePromise(deferred,result,{xhr:xhr})};this._reset=function(){progress.data.AuthenticationProviderSSO.prototype._reset.apply(this);clearTokenInfo();ssoTokenInfo=null};this._openRequestAndAuthorize=function(xhr,verb,uri,async,callback){var that=this,date,errorObject;function afterRefreshCheck(provider,result,info){if(result===progress.data.Session.AUTHENTICATION_FAILURE){callback(new Error(progress.data._getMsgText("jsdoMSG060")))}else{progress.data.AuthenticationProviderSSO.prototype._openRequestAndAuthorize.apply(that,[xhr,verb,uri,async,function(errorObject){if(errorObject instanceof Error){callback(errorObject)}else{xhr.setRequestHeader("Authorization","oecp "+getToken());callback(xhr)}}])}}if(this.hasClientCredentials()){date=new Date;if(this.automaticTokenRefresh&&this.hasRefreshToken()&&date.getTime()>retrieveAccessTokenExpiration()){try{var callback=function(params,result,info){params=progress.util.Deferred.getParamObject(params,result,info);afterRefreshCheck(params.provider,params.result,params.info)};this.refresh().then(callback,callback)}catch(e){callback(e)}}else{afterRefreshCheck(this,progress.data.Session.SUCCESS,null)}}else{errorObject=new Error(progress.data._getMsgText("jsdoMSG125","AuthenticationProvider"));callback(errorObject)}};this.hasClientCredentials=function(){return retrieveToken()===null?false:true};this.refresh=function(){var deferred=new progress.util.Deferred,xhr;try{if(!this._loggedIn){throw new Error(progress.data._getMsgText("jsdoMSG053","AuthenticationProvider","refresh"))}if(!this.hasRefreshToken()){throw new Error(progress.data._getMsgText("jsdoMSG054","AuthenticationProvider"))}xhr=new XMLHttpRequest;openRefreshRequest(xhr);xhr.onreadystatechange=function(){if(xhr.readyState===4){processRefreshResult(xhr,deferred)}};xhr.send('{"token_type":"'+retrieveTokenType()+'","refresh_token":"'+retrieveRefreshToken()+'"}')}catch(error){if(progress.util.Deferred.useJQueryPromises){throw error}else{deferred.reject(this,progress.data.Session.GENERAL_FAILURE,{errorObject:error})}}return deferred.promise()};this.hasRefreshToken=function(){return retrieveRefreshToken()===null?false:true};this._initialize(uri,progress.data.Session.AUTH_TYPE_FORM_SSO,{_loginURI:progress.data.AuthenticationProvider._springFormTokenLoginURIBase,_logoutURI:progress.data.AuthenticationProvider._springLogoutURIBase,_refreshURI:progress.data.AuthenticationProvider._springFormTokenRefreshURIBase});_automaticTokenRefresh=true;Object.defineProperty(this,"automaticTokenRefresh",{get:function(){return _automaticTokenRefresh},set:function(value){if(value===true||value===false){_automaticTokenRefresh=value}else{throw new Error(progress.data._getMsgText("jsdoMSG061","AuthenticationProvider","automaticTokenRefresh"))}},enumerable:true});this._dataKeys.automaticTokenRefresh=this._storageKey+".automaticTokenRefresh";temp=this._retrieveInfoItem(this._dataKeys.automaticTokenRefresh);if(temp===false){_automaticTokenRefresh=false}tokenDataKeys.token=this._storageKey+tokenDataKeys.token;tokenDataKeys.refreshToken=this._storageKey+tokenDataKeys.refreshToken;tokenDataKeys.tokenType=this._storageKey+tokenDataKeys.tokenType;tokenDataKeys.expiration=this._storageKey+tokenDataKeys.expiration;tokenDataKeys.accessTokenExpiration=this._storageKey+tokenDataKeys.accessTokenExpiration;if(retrieveToken()){this._loggedIn=true}};function SSOProxy(){}SSOProxy.prototype=progress.data.AuthenticationProviderForm.prototype;progress.data.AuthenticationProviderSSO.prototype=new SSOProxy;progress.data.AuthenticationProviderSSO.prototype.constructor=progress.data.AuthenticationProviderSSO;fn=progress.data.AuthenticationProviderSSO.prototype._storeInfo;progress.data.AuthenticationProviderSSO.prototype._storeInfo=function(){progress.data.AuthenticationProviderSSO.prototype._storeInfo._super.apply(this);this._storage.setItem(this._dataKeys.automaticTokenRefresh,JSON.stringify(this._automaticTokenRefresh))};progress.data.AuthenticationProviderSSO.prototype._storeInfo._super=fn;fn=progress.data.AuthenticationProviderSSO.prototype._clearInfo;progress.data.AuthenticationProviderSSO.prototype._clearInfo=function(){progress.data.AuthenticationProviderSSO.prototype._clearInfo._super.apply(this);this._storage.removeItem(this._dataKeys.automaticTokenRefresh)};progress.data.AuthenticationProviderSSO.prototype._clearInfo._super=fn})();if(typeof kendo!=="undefined"){(function(){var JSDODataReader,JSDOTransport,JSDOObservable=new kendo.Observable;function initializeJSDO(transport,options){var jsdo,resourceName;if(options.jsdo instanceof progress.data.JSDO){jsdo=options.jsdo}else if(typeof options.jsdo==="string"){resourceName=options.jsdo;jsdo=new progress.data.JSDO({name:resourceName})}else{throw new Error("JSDO: jsdo property must be either a JSDO instance or a string.")}if(transport.tableRef===undefined&&jsdo._defaultTableRef){transport.tableRef=jsdo._defaultTableRef._name}if(transport.tableRef===undefined){throw new Error("JSDO: A tableRef must be specified when using a multi-table DataSet.")}else if(jsdo[transport.tableRef]===undefined){throw new Error("JSDO: tableRef '"+transport.tableRef+"' is not present in JSDO definition.")}return jsdo}JSDODataReader=kendo.data.readers.json.extend({init:function(arg1){var event={},transport;JSDOObservable.trigger("info",event);transport=this.transport=event.sender._events.info.transport;kendo.data.readers.json.fn.init.call(this,arg1);this.model=kendo.data.Model.define({init:function(data){var record;if(!data||jQuery.isEmptyObject(data)){data=transport._getInitialValues()}record=transport._convertDataTypes(data);transport.jsdo._deleteProdsProperties(record,true);kendo.data.Model.fn.init.call(this,record)},id:"_id",fields:transport._getModel()})},total:function(data){return data.total||(data.data?data.data.length:data.length)},data:function(data){return data.data||data}});JSDOTransport=kendo.data.RemoteTransport.extend({init:function(options){var transport=this,fnName;if(options.tableRef!==undefined){transport.tableRef=options.tableRef}transport.jsdo=initializeJSDO(transport,options);transport._initFromServer=false;transport.autoSave=options.autoSave!==undefined?options.autoSave:true;transport.readLocal=options.readLocal!==undefined?options.readLocal:false;transport.countFnName=options.countFnName;transport.useArrays=options.useArrays!==undefined?options.useArrays:false;if(transport.countFnName!==undefined){if(typeof transport.jsdo[transport.countFnName]!=="function"){throw new Error("Invoke operation '"+transport.countFnName+"' for countFnName is not defined.")}}else if(transport.jsdo._resource.generic.count!==undefined){for(fnName in transport.jsdo._resource.fn){if(transport.jsdo._resource.fn.hasOwnProperty(fnName)){if(transport.jsdo._resource.generic.count===transport.jsdo._resource.fn[fnName]["function"]){transport.countFnName=fnName;break}}}}JSDOObservable.one("info",function(e){e.sender._events.info.transport=transport});transport._initConvertTypes();kendo.data.RemoteTransport.fn.init.call(this,options)},_initConvertTypes:function(){var transport=this,i,schema,fieldName,dateFields=[],arrayFields=[],convertDateFields=false;transport._convertTypes=false;schema=transport.jsdo[transport.tableRef].getSchema();for(i=0;i0&&fieldName.charAt(0)!=="_"){if(schema[i].type==="string"&&schema[i].format&&schema[i].format.indexOf("date")!==-1){dateFields.push(fieldName);if(!convertDateFields){convertDateFields=true}}else if(!transport.useArrays&&schema[i].type==="array"){arrayFields.push(fieldName);if(!convertDateFields&&schema[i].ablType&&schema[i].ablType.indexOf("DATE")===0){convertDateFields=true}}}}if(dateFields.length>0||arrayFields.length>0){transport._convertTypes=true;transport._convertFields={};transport._convertFields._arrayFields=[];transport._convertFields._dateFields=[]}if(dateFields.length>0){transport._convertFields._dateFields=dateFields}if(convertDateFields){transport._convertFields._datePattern=new RegExp("^([0-9]+)?-([0-9]{2})?-([0-9]{2})?$");transport._convertFields._dateTimePattern=new RegExp("^([0-9]+)?-([0-9]{2})?-([0-9]{2})?"+"T([0-9]{2})?:([0-9]{2})?:([0-9]{2})?.([0-9]{3})?$")}if(arrayFields.length>0){transport._convertFields._arrayFields=arrayFields}},_convertStringToDate:function(data,fieldName,targetFieldName){var transport=this,array,ablType,orig;if(!targetFieldName){targetFieldName=fieldName}array=transport._convertFields._datePattern.exec(data[targetFieldName])||[];if(array.length>0){data[targetFieldName]=new Date(parseInt(array[1],10),parseInt(array[2],10)-1,parseInt(array[3],10))}else{ablType=transport.jsdo[transport.tableRef]._fields[fieldName.toLowerCase()].ablType;if(ablType==="DATETIME"){array=transport._convertFields._dateTimePattern.exec(data[targetFieldName])||[];if(array.length>0){data[targetFieldName]=new Date(parseInt(array[1],10),parseInt(array[2],10)-1,parseInt(array[3],10),parseInt(array[4],10),parseInt(array[5],10),parseInt(array[6],10),parseInt(array[7],10))}}if(typeof data[targetFieldName]==="string"){orig=data[targetFieldName];try{data[targetFieldName]=new Date(data[targetFieldName])}catch(e){data[targetFieldName]=orig;console.log(progress.data._getMsgText("jsdoMSG000","_convertStringToDate() could not convert to date object: "+orig))}}}},_convertDataTypes:function(data){var transport=this,i,k,fieldName,schemaInfo,prefixElement,elementName,copy;delete data["prods:rowState"];if(!transport.useArrays&&transport._convertTypes&&transport._convertFields._arrayFields.length>0){copy={};transport.jsdo._copyRecord(transport.jsdo._buffers[transport.tableRef],data,copy);data=copy}if(!transport._convertTypes){return data}for(k=0;k0&&schema[i].name.charAt(0)!=="_"){type=schema[i].type;if(type==="integer"){type="number"}else if(type==="string"&&schema[i].format&&schema[i].format.indexOf("date")!==-1){type="date"}if(type==="array"){for(j=0;j0&&schema[i].name.charAt(0)!=="_"){defaultValue=transport.jsdo._getDefaultValue(schema[i]);if(schema[i].type==="array"){data[schema[i].name]=[];for(j=0;j0||jsdo[this.tableRef]._data instanceof Array&&jsdo[this.tableRef]._data.length>0}else{this._initFromServer=jsdo[this.tableRef]._data instanceof Array&&jsdo[this.tableRef]._data.length>0}}data.data=[];if(this.readLocal&&this._initFromServer){saveUseRelationships=jsdo.useRelationships;jsdo.useRelationships=false;data=this._getData(options);jsdo.useRelationships=saveUseRelationships;options.success(data);return}if(!this.readLocal){if(options.data){for(property in options.data){if(options.data.hasOwnProperty(property)){if(options.data[property]!==undefined&&optionsMapping[property]){if(filter===undefined){filter={}}filter[optionsMapping[property]]=options.data[property]}}}if(filter){filter.tableRef=this.tableRef}}}callback=function onAfterFillJSDO(object,success,request){var data={},saveUseRelationships,promise,total,exception,jsdo;object=progress.util.Deferred.getParamObject(object,success,request);jsdo=object.jsdo;success=object.success;request=object.request;if(success){saveUseRelationships=jsdo.useRelationships;jsdo.useRelationships=false;if(transport.readLocal){data=transport._getData(options)}else{data.data=jsdo[transport.tableRef].getData();total=jsdo.getProperty("server.count");if(total){data.total=total}}jsdo.useRelationships=saveUseRelationships;transport._initFromServer=true;if(options.data&&options.data.take){if(!transport.readLocal&&transport.countFnName!==undefined&&typeof jsdo[transport.countFnName]==="function"){if(options.data.skip===0&&options.data.take>data.data.length){options.success(data);return}promise=jsdo.invoke(transport.countFnName,{filter:request.objParam.filter});promise.then(function(object,success,request){var exception,total,jsdo;object=progress.util.Deferred.getParamObject(object,success,request);jsdo=object.jsdo;success=object.success;request=object.request;try{if(typeof request.response==="object"&&Object.keys(request.response).length===1){total=request.response[Object.keys(request.response)];if(typeof total!=="number"){total=undefined}}}catch(e){}if(total!==undefined){if(total){data.total=total}options.success(data)}else{exception=new Error("Unexpected response from '"+transport.countFnName+"' operation.");options.error(request.xhr,request.xhr.status,exception)}},function(object,success,request){var exception,jsdo;object=progress.util.Deferred.getParamObject(object,success,request);jsdo=object.jsdo;success=object.success;request=object.request;exception=new Error("Error invoking '"+transport.countFnName+"' operation.");options.error(request.xhr,request.xhr.status,exception)})}else{options.success(data)}}else{options.success(data)}}else{exception=new Error("Error while reading records.");options.error(request.xhr,request.xhr.status,exception)}};jsdo.fill(filter).then(callback,callback)}catch(e){options.error(null,null,e)}},_processChanges:function(options,request){var jsdo=this.jsdo,transport=this,array,i,jsrecord,id,record;if(options.batch){array=[];if(options.data.created instanceof Array){if(jsdo._resource.idProperty){if(request.jsrecords){for(i=0;i=2&&typeof args[0]==="string"&&typeof args[1]==="string"){listenerData.operation=args[1];listenerData.fn=args[2];listenerData.scope=args[3]}else if(args.length>=2&&typeof args[0]==="string"&&typeof args[1]==="function"){listenerData.operation=undefined;listenerData.scope=args[2];listenerData.fn=args[1]}else{throw new Error}};this.subscribe=function(evt,operation,fn,scope){var listenerData,observers;if(!evt){throw new Error(progress.data._getMsgText("jsdoMSG037",this.toString(),"subscribe"))}if(typeof evt!=="string"){throw new Error(progress.data._getMsgText("jsdoMSG033",this.toString(),"subscribe",progress.data._getMsgText("jsdoMSG039")))}this._events=this._events||{};evt=evt.toLowerCase();listenerData={fn:undefined,scope:undefined,operation:undefined};try{this.validateSubscribe(arguments,evt,listenerData)}catch(e){throw new Error(progress.data._getMsgText("jsdoMSG033",this.toString(),"subscribe",e.message))}observers=this._events[evt]||[];observers=_filterObservers(observers,listenerData.fn,listenerData.scope,listenerData.operation);observers.push(listenerData);this._events[evt]=observers;return this};this.unsubscribe=function(evt,operation,fn,scope){var listenerData,observers;if(!evt){throw new Error(progress.data._getMsgText("jsdoMSG037",this.toString(),"unsubscribe"))}if(typeof evt!=="string"){throw new Error(progress.data._getMsgText("jsdoMSG033",this.toString(),"unsubscribe",progress.data._getMsgText("jsdoMSG037")))}this._events=this._events||{};evt=evt.toLowerCase();listenerData={fn:undefined,scope:undefined,operation:undefined};try{this.validateSubscribe(arguments,evt,listenerData)}catch(e){throw new Error(progress.data._getMsgText("jsdoMSG033",this.toString(),"unsubscribe",e.message))}observers=this._events[evt]||[];if(observers.length>0){this._events[evt]=_filterObservers(observers,listenerData.fn,listenerData.scope,listenerData.operation)}return this};this.trigger=function(evt,operation,args){var observers,op;if(!evt){throw new Error(progress.data._getMsgText("jsdoMSG037",this.toString(),"trigger"))}this._events=this._events||{};evt=evt.toLowerCase();observers=this._events[evt]||[];if(observers.length>0){args=Array.prototype.slice.call(arguments);if(arguments.length>=2&&typeof evt==="string"&&typeof operation==="string"){op=operation;args=args.length>2?args.slice(2):[]}else if(arguments.length>=1&&typeof evt==="string"){op=undefined;args=args.length>1?args.slice(1):[]}else{throw new Error(progress.data._getMsgText("jsdoMSG033",this.toString(),"trigger"))}observers.forEach(function(el){if(el.operation===op){el.fn.apply(el.scope,args)}})}return this};this.unsubscribeAll=function(evt,operation){var observers;if(evt){this._events=this._events||{};if(typeof evt==="string"){evt=evt.toLowerCase();observers=this._events[evt]||[];observers.forEach(function(el){if(el.operation){this.unsubscribe(evt,el.operation,el.fn,el.scope)}else{this.unsubscribe(evt,el.fn,el.scope)}},this)}}else{this._events={}}return this}};progress.data.LocalStorage=function LocalStorage(){if(typeof localStorage==="undefined"){throw new Error(progress.data._getMsgText("jsdoMSG126","progress.data.LocalStorage","localStorage"))}this.saveToLocalStorage=function(name,dataObj){localStorage.setItem(name,JSON.stringify(dataObj))};this.readFromLocalStorage=function(name){var jsonStr=localStorage.getItem(name),dataObj=null;if(jsonStr!==null){try{dataObj=JSON.parse(jsonStr)}catch(e){dataObj=null}}return dataObj};this.clearLocalStorage=function(name){localStorage.removeItem(name)}};progress.util._convertToABLWhereString=function(tableRef,filter){var result=[],logic=filter.logic||"and",idx,length,field,fieldInfo,type,format,operator,value,ablType,filters=filter.filters||[filter],whereOperators={eq:"=",neq:"<>",gt:">",gte:">=",lt:"<",lte:"<=",contains:"INDEX",doesnotcontain:"INDEX",endswith:"R-INDEX",startswith:"BEGINS",isnull:"ISNULL",isnotnull:"ISNOTNULL",isempty:"ISEMPTY",isnotempty:"ISNOTEMPTY"};for(idx=0,length=filters.length;idx 0"}else{format="{2} MATCHES '*{1}'"}}else{format="{2} {0} "+format}filter=progress.util._format(format,operator,value,field)}else if(operator&&value===undefined){if(filter.operator==="isempty"||filter.operator==="isnotempty"){ablType=tableRef._getABLType(field);if(ablType!==CHARACTER_ABL_TYPE){throw new Error("Error parsing filter object. The operator "+filter.operator+" requires a CHARACTER field")}if(filter.operator==="isempty"){format="{2} = ''"}else if(filter.operator==="isnotempty"){format="{2} <> ''"}}else{if(filter.operator==="isnull"){format="{2} = ?"}else if(filter.operator==="isnotnull"){format="{2} <> ?"}else{format="{2} {0} ?"}}filter=progress.util._format(format,operator,value,field)}}result.push(filter)}filter=result.join(" "+logic+" ");if(result.length>1){filter="("+filter+")"}return filter};progress.util._convertToSQLQueryString=function(tableRef,filter,addSelect){var result=[],logic=filter.logic||"and",idx,length,field,type,format,operator,value,fieldFormat,filters=filter.filters||[filter],filterStr,usingLike=true,whereOperators={eq:"=",neq:"!=",gt:">",gte:">=",lt:"<",lte:"<=",contains:"LIKE",doesnotcontain:"NOT LIKE",endswith:"LIKE",startswith:"LIKE",isnull:"ISNULL",isnotnull:"ISNOTNULL",isempty:"ISEMPTY",isnotempty:"ISNOTEMPTY"};if(typeof addSelect==="undefined"){addSelect=false}for(idx=0,length=filters.length;idx1){filterStr="("+filterStr+")"}if(addSelect===true){filterStr="SELECT * FROM "+tableRef._name+" WHERE "+filterStr}return filterStr};progress.util._getObjectType=function(value){return Object.prototype.toString.call(value).slice(8,-1)};progress.util._format=function(fmt){var values=arguments,formatRegExp=/\{(\d+)(:[^\}]+)?\}/g;return fmt.replace(formatRegExp,function(match,index,placeholderFormat){var value=values[parseInt(index,10)+1];return progress.util._toString(value,placeholderFormat?placeholderFormat.substring(1):"")})};progress.util._toString=function(value,fmt){var str;if(fmt){if(progress.util._getObjectType(value)==="Date"){return progress.util._formatDate(value,fmt)}}if(typeof value==="number"){str=value.toString()}else{str=value!==undefined?value:""}return str};progress.util._pad=function(number,digits){var zeros=["","0","00","000","0000"],end;number=String(number);digits=digits||2;end=digits-number.length;if(end){return zeros[digits].substring(0,end)+number}return number};progress.util._formatDate=function(date,format){var dateFormatRegExp=/dd|MM|yyyy|hh|mm|fff|FFF|ss|zzz|iso|"[^"]*"|'[^']*'/g;return format.replace(dateFormatRegExp,function(match){var minutes,result,sign;if(match==="dd"){result=progress.util._pad(date.getDate())}else if(match==="MM"){result=progress.util._pad(date.getMonth()+1)}else if(match==="yyyy"){result=progress.util._pad(date.getFullYear(),4)}else if(match==="hh"){result=progress.util._pad(date.getHours())}else if(match==="mm"){result=progress.util._pad(date.getMinutes())}else if(match==="ss"){result=progress.util._pad(date.getSeconds())}else if(match==="fff"){result=progress.util._pad(date.getMilliseconds(),3)}else if(match==="FFF"){result=String(date.getTime())}else if(match==="zzz"){minutes=date.getTimezoneOffset();sign=minutes<0;result=(sign?"+":"-")+minutes}else if(match==="iso"){result=date.toISOString()}return result!==undefined?result:match.slice(1,match.length-1)})};progress.util.jsdoSettingsProcessor=function jsdoSettingsProcessor(jsdoSettings){if(typeof jsdoSettings==="object"){if(jsdoSettings.authenticationModel===undefined||jsdoSettings.authenticationModel===""){jsdoSettings.authenticationModel="ANONYMOUS"}}}})();(function(){var PROGRESS_JSDO_PCT_MAX_EMPTY_BLOCKS=20,PROGRESS_JSDO_OP_STRING=["none","create","read","update","delete","submit"],PROGRESS_JSDO_ROW_STATE_STRING=["","created","","modified","deleted"];if(typeof progress==="undefined"){progress={}}if(typeof progress.data==="undefined"){progress.data={}}progress.data._nextid=0;progress.data._uidprefix=""+(Date.now?Date.now():(new Date).getTime());var UID_MAX_VALUE=999999999999999;progress.data._getNextId=function(){var uid=++progress.data._nextid;if(uid>=UID_MAX_VALUE){progress.data._nextid=uid=1;progress.data._uidprefix=""+(Date.now?Date.now():(new Date).getTime())}return progress.data._uidprefix+"-"+uid};var msg={};msg.msgs={};msg.msgs.jsdoMSG000="JSDO, Internal Error: {1}";msg.msgs.jsdoMSG001="JSDO: JSDO has multiple tables. Please use {1} at the table reference level.";msg.msgs.jsdoMSG002="JSDO: Working record for '{1}' is undefined.";msg.msgs.jsdoMSG003="JSDO: {1} function requires a function as a parameter.";msg.msgs.jsdoMSG004="JSDO: Unable to find resource '{1}' in the catalog.";msg.msgs.jsdoMSG005="JSDO: Data for table '{1}' was not specified in addRecords() call.";msg.msgs.jsdoMSG006="JSDO: Data for JSDO was not specified in addRecords() call.";msg.msgs.jsdoMSG007="JSDO: Test function in {1} must return a boolean.";msg.msgs.jsdoMSG008="JSDO: Invalid keyFields parameter in addRecords() call.";msg.msgs.jsdoMSG009="JSDO: KeyField '{1}' in addRecords() call was not found in the schema.";msg.msgs.jsdoMSG010="JSDO: Field '{1}' in relationship was not found in the schema.";msg.msgs.jsdoMSG011="UIHelper: JSDO has multiple tables. "+"Please use {1} at the table reference level.";msg.msgs.jsdoMSG012="UIHelper: Invalid {2} parameter in {1} call.";msg.msgs.jsdoMSG020="JSDO: tableName parameter must be a string in addRecords() call.";msg.msgs.jsdoMSG021="JSDO: addMode parameter must be specified in addRecords() call.";msg.msgs.jsdoMSG022="JSDO: Invalid addMode specified in addRecords() call.";msg.msgs.jsdoMSG023="JSDO: Duplicate found in addRecords() call using APPEND mode.";msg.msgs.jsdoMSG024="{1}: Unexpected signature in call to {2} function.";msg.msgs.jsdoMSG025="{1}: Invalid parameters in call to {2} function.";msg.msgs.jsdoMSG026="JSDO: saveChanges requires a "+"CREATE, UPDATE, DELETE or SUBMIT operation to be defined.";msg.msgs.jsdoMSG030="JSDO: Invalid {1}, expected {2}.";msg.msgs.jsdoMSG031="JSDO: Specified sort field name '{1}' was not found in the schema.";msg.msgs.jsdoMSG032="JSDO: Before-image data already exists for record in addRecords() call.";msg.msgs.jsdoMSG033="{1}: Invalid signature for {2}. {3}";msg.msgs.jsdoMSG034="JSDO: In '{1}' function, JSON data is missing _id";msg.msgs.jsdoMSG035="JSDO: In '{1}' function, before-image JSON data is missing prods:clientId";msg.msgs.jsdoMSG036="JSDO: '{1}' can only be called for a dataset";msg.msgs.jsdoMSG037="{1}: Event name must be provided for {2}.";msg.msgs.jsdoMSG038="Too few arguments. There must be at least {1}.";msg.msgs.jsdoMSG039="The name of the event is not a string.";msg.msgs.jsdoMSG040="The event listener is not a function.";msg.msgs.jsdoMSG041="The event listener scope is not an object.";msg.msgs.jsdoMSG042="'{1}' is not a defined event for this object.";msg.msgs.jsdoMSG043="{1}: A session object was requested to check the status of a Mobile "+"Service named '{2}', but it has not loaded the definition of that service.";msg.msgs.jsdoMSG044="JSDO: In '{1}' function, {2} is missing {3} property.";msg.msgs.jsdoMSG045="JSDO: {1} function: {2} is missing {3} property.";msg.msgs.jsdoMSG046="JSDO: {1} operation is not defined.";msg.msgs.jsdoMSG047="{1} timeout expired.";msg.msgs.jsdoMSG048="{1}: {2} method has argument '{3}' that is missing property '{4}'.";msg.msgs.jsdoMSG049="{1}: Unexpected error calling {2}: {3}";msg.msgs.jsdoMSG050="No token returned from server";msg.msgs.jsdoMSG051="{1} The login method was not executed because the AuthenticationProvider is already logged in.";msg.msgs.jsdoMSG052="{1}: The login method was not executed because no credentials were supplied.";msg.msgs.jsdoMSG053="{1}: {2} was not executed because the AuthenticationProvider is not logged in.";msg.msgs.jsdoMSG054="{1}: Token refresh was not executed because the AuthenticationProvider does not have a refresh token.";msg.msgs.jsdoMSG055="{1}: Token refresh was not executed because the authentication model is not sso.";msg.msgs.jsdoMSG056="{1}: Already logged in.";msg.msgs.jsdoMSG057="{1}: Cannot call {2} when authenticationModel is SSO. Please use the AuthenticationProvider object instead.";msg.msgs.jsdoMSG058="{1}: Cannot pass username and password to addCatalog when authenticationModel "+"is sso. Pass an AuthenticationProvider instead.";msg.msgs.jsdoMSG059="{1}: Error in constructor. The authenticationModels of the "+"AuthenticationProvider ({2}) and the JSDOSession ({3}) were not compatible.";msg.msgs.jsdoMSG060="AuthenticationProvider: AuthenticationProvider is no longer logged in. "+"Tried to refresh SSO token but failed due to authentication error at token server.";msg.msgs.jsdoMSG061="{1}: Attempted to set {2} property to an invalid value.";msg.msgs.jsdoMSG062="{1}: Cannot call {2} when an AuthenticationProvider is already available and logged in.";msg.msgs.jsdoMSG100="JSDO: Unexpected HTTP response. Too many records.";msg.msgs.jsdoMSG101="Network error while executing HTTP request.";msg.msgs.jsdoMSG110="Catalog error: idProperty not specified for resource '{1}'. "+"idProperty is required {2}.";msg.msgs.jsdoMSG111="Catalog error: Schema '{1}' was not found in catalog.";msg.msgs.jsdoMSG112="Catalog error: Output parameter '{1}' was not found for operation '{2}'.";msg.msgs.jsdoMSG113="Catalog error: Found xType '{1}' for output parameter '{2}' "+"for operation '{3}' but xType DATASET, TABLE or ARRAY was expected.";msg.msgs.jsdoMSG114="JSDO: idProperty '{1}' is missing from '{2}' record.";msg.msgs.jsdoMSG115="JSDO: Invalid option specified in {1}() call.";msg.msgs.jsdoMSG116="JSDO: {1} parameter must be a string in {2} call.";msg.msgs.jsdoMSG117="JSDO: Schema from storage area '{1}' does not match JSDO schema";msg.msgs.jsdoMSG118="JSDO: Plugin '{1}' was not found.";msg.msgs.jsdoMSG119="JSDO: A mappingType is expected when 'capabilities' is set."+" Please specify a plugin (ex: JFP).";msg.msgs.jsdoMSG120="JSDO: Parameter '{2}' requires capability '{1}' in the catalog.";msg.msgs.jsdoMSG121="{1}: Argument {2} must be of type {3} in {4} call.";msg.msgs.jsdoMSG122="{1}: Incorrect number of arguments in {2} call. There should be {3}.";msg.msgs.jsdoMSG123="{1}: A server response included an invalid '{2}' header.";msg.msgs.jsdoMSG124="JSDO: autoApplyChanges is not supported for saveChanges(true) "+"with a temp-table. Use jsdo.autoApplyChanges = false.";msg.msgs.jsdoMSG125="{1}: The AuthenticationProvider is not managing valid credentials.";msg.msgs.jsdoMSG126="{1}: No support for {2}.";msg.msgs.jsdoMSG127="JSDO: acceptRowChanges() cannot be called for record with _rejected === true.";msg.msgs.jsdoMSG500="{1}: '{2}' objects must contain a '{3}' property.";msg.msgs.jsdoMSG501="{1}: '{2}' in '{3}' function cannot be an empty string.";msg.msgs.jsdoMSG502="{1}: The '{2}' parameter passed to the '{3}' function has an invalid value for "+"its '{4}' property.";msg.msgs.jsdoMSG503="{1}: '{2}' must be of type '{3}'.";msg.msgs.jsdoMSG504="{1}: {2} has an invalid value for the '{3}' property.";msg.msgs.jsdoMSG505="{1}: '{2}' objects must have a '{3}' method.";msg.msgs.jsdoMSG506="{1}: Invalid argument for the {2} parameter in {3} call.";msg.msgs.jsdoMSG507="{1}: '{2}' is an invalid value for the {3} parameter in {4} call.";msg.msgs.jsdoMSG508="JSDOSession: If a JSDOSession object is using the SSO authentication model, "+"the options object passed to its constructor must include an authProvider property.";msg.msgs.jsdoMSG509="progress.data.getSession: If the authenticationModel is AUTH_TYPE_SSO, "+"authenticationURI and authProviderAuthenticationModel are required parameters.";msg.msgs.jsdoMSG510="{1}: This session has been invalidated and cannot be used.";msg.msgs.jsdoMSG511="JSDOSession: addCatalog() can only be called if an AuthenticationProvider was passed as an argument or "+"connect() has been successfully called.";msg.msgs.jsdoMSG512="JSDOSession: Error while loading multiple catalogs.";msg.msgs.jsdoMSG998="JSDO: JSON object in addRecords() must be DataSet or Temp-Table data.";msg.getMsgText=function(n,args){var text=msg.msgs[n],i;if(!text){throw new Error("Message text was not found by getMsgText()")}for(i=1;i=PROGRESS_JSDO_PCT_MAX_EMPTY_BLOCKS)this._needCompaction=true;data=newDataArray}else{if(params&&(params.sort||params.top)){newDataArray=[];for(i=0;i0){sortObject.tableRef=this;data.sort(this._getCompareFn(sortObject))}}if(params.top){if(typeof params.skip=="undefined"){params.skip=0}data=data.splice(params.skip,params.top)}}return data};this._recToDataObject=function(record,includeChildren){var array=[record];var dataObject=array;if(typeof includeChildren=="undefined"){includeChildren=false}if(this._jsdo._dataSetName){dataObject={};dataObject[this._jsdo._dataSetName]={};dataObject[this._jsdo._dataSetName][this._name]=array;if(includeChildren&&this._children.length>0){var jsrecord=this._findById(record._id,false);if(jsrecord){for(var i=0;i0){for(var j=0;j0){for(var i=0;i=PROGRESS_JSDO_PCT_MAX_EMPTY_BLOCKS)this._needCompaction=true};this._equalRecord=function(rec1,rec2,keyFields){var field;var match=true;for(var i=0;ivalue2||(value1===undefined||value1===null))return sortAscending[i]?1:-1;else if(value10)this._sort(sortObject)}else{this._sort(arg1)}this._createIndex()};this._sort=function(arg1){if(arguments.length===0&&(!this.autoSort||this._sortFn===undefined&&this._sortObject.sortFields===undefined))return;if(arguments.length===0){if(this._sortFn){this._data.sort(this._sortFn)}else{this._data.sort(this._compareFields)}this._needsAutoSorting=false}else{if(typeof arg1=="function"){this._data.sort(this._getCompareFn(arg1))}else{arg1.tableRef=this;this._data.sort(this._getCompareFn(arg1))}if(this.autoSort)this._needsAutoSorting=true}};this.addRecords=function(jsonObject,addMode,keyFields,trackChanges,isInvoke){this._jsdo._addRecords(this._name,jsonObject,addMode,keyFields,trackChanges,isInvoke)};this.acceptChanges=function(){var tableRef=this;for(var id in tableRef._beforeImage){if(tableRef._beforeImage[id]===null){var jsrecord=tableRef._findById(id,false);if(jsrecord!==null){tableRef._jsdo._deleteProdsProperties(jsrecord.data,true)}}else if(this._changed[id]!==undefined){var jsrecord=this._findById(id,false);if(jsrecord!==null){tableRef._jsdo._deleteProdsProperties(jsrecord.data,true)}}}tableRef._processed={};tableRef._added=[];tableRef._changed={};tableRef._deleted=[];tableRef._beforeImage={}};this.rejectChanges=function(){for(var id in this._beforeImage){if(this._beforeImage[id]===null){this._jsdo._undoCreate(this,id)}else if(this._changed[id]!==undefined){this._jsdo._undoUpdate(this,id,true)}else{this._jsdo._undoDelete(this,id,true)}}var tableRef=this;tableRef._processed={};tableRef._added=[];tableRef._changed={};tableRef._deleted=[]};this.hasChanges=function(){return Object.keys(this._beforeImage).length!==0};this.getChanges=function(){var result=[];for(var id in this._beforeImage){var item={rowState:"",record:null};if(this._beforeImage[id]===null){item.rowState=PROGRESS_JSDO_ROW_STATE_STRING[progress.data.JSDO._OP_CREATE];item.record=this._findById(id,false)}else if(this._changed[id]!==undefined){item.rowState=PROGRESS_JSDO_ROW_STATE_STRING[progress.data.JSDO._OP_UPDATE];item.record=this._findById(id,false)}else{item.rowState=PROGRESS_JSDO_ROW_STATE_STRING[progress.data.JSDO._OP_DELETE];item.record=new progress.data.JSRecord(this,this._beforeImage[id])}result.push(item)}return result};this._clearErrorStrings=function(){var record=null;for(var id in this._beforeImage){if(this._beforeImage[id]===null){record=this._findById(id,false);if(record){delete record.data._errorString}}else{record=this._findById(id,false);if(record){delete record.data._errorString}else{delete this._beforeImage[id]._errorString}}}};this._applyChanges=function(){var i;for(var id in this._beforeImage){if(this._beforeImage[id]===null){var jsrecord=this._findById(id,false);if(jsrecord===null&&this._jsdo._resource.idProperty!==undefined){if(this._tmpIndex[id]){var record=this._data[this._tmpIndex[id].index];jsrecord=record?new progress.data.JSRecord(this,record):null;delete this._tmpIndex[id]}}if(jsrecord!==null){if(jsrecord.data._rejected||jsrecord.data._errorString!==undefined){this._jsdo._undoCreate(this,id)}else{jsrecord.acceptRowChanges()}}else{var found=false;for(var i=0;i0){for(var i=0;iindex){i--}if(i!=index){this._tableRef._data.splice(index,1);this._tableRef._data.splice(i,0,record);this._tableRef._createIndex()}}}};this.assign=function(record){if(record===undefined)throw new Error(msg.getMsgText("jsdoMSG024","JSDO","assign() or update()"));this._saveBeforeImageUpdate();var fieldName,i,j,value,schema=this._tableRef.getSchema(),prefixElement,name;if(record){for(i=0;i0&&!this._fields[fieldName.toLowerCase()]){name=fieldName.substring(0,index);element=fieldName.substring(index+progress.data.JSDO.ARRAY_INDEX_SEPARATOR.length);fieldInfo=this._fields[name.toLowerCase()];if(!isNaN(element)&&fieldInfo&&fieldInfo.type==="array"){return this.record.data[name][element-1]}}return this.record.data[fieldName]}else return null},set:function(value){var name=fieldName,index,element,fieldInfo;if(this.record){this.record._saveBeforeImageUpdate();try{index=fieldName.indexOf(progress.data.JSDO.ARRAY_INDEX_SEPARATOR);if(index>0&&!this._fields[fieldName.toLowerCase()]){name=fieldName.substring(0,index);element=fieldName.substring(index+progress.data.JSDO.ARRAY_INDEX_SEPARATOR.length);fieldInfo=this._fields[name.toLowerCase()];if(!isNaN(element)&&fieldInfo&&fieldInfo.type==="array"){this.record.data[name][element-1]=value;return}}this.record.data[fieldName]=value}finally{this.record._sortRecord(name)}}},enumerable:true,writeable:true})};Object.defineProperty(this,"hasSubmitOperation",{get:function(){return this._hasSubmitOperation},enumerable:true});Object.defineProperty(this,"hasCUDOperations",{get:function(){return this._hasCUDOperations},enumerable:true});Object.defineProperty(this,"defaultTableRef",{get:function(){return this._defaultTableRef},enumerable:true});this._buffers={};this._numBuffers=0;this._defaultTableRef=null;this._async=true;this._dataProperty=null;this._dataSetName=null;this.operations=[];this.useRelationships=true;this._session=null;this._needCompaction=false;this._hasCUDOperations=false;this._hasSubmitOperation=false;this._useSubmit=false;this.autoApplyChanges=true;this._lastErrors=[];this._localStorage=null;this._convertForServer;this._fillMergeMode;var autoFill=false;if(!arguments[0]){throw new Error("JSDO: Parameters are required in constructor.")}if(typeof arguments[0]=="string"){this.name=arguments[0]}else if(typeof arguments[0]=="object"){var args=arguments[0];for(var v in args){switch(v){case"autoFill":autoFill=args[v];break;case"events":this._events={};for(var eventName in args[v]){this._events[eventName.toLowerCase()]=args[v][eventName]}break;case"dataProperty":this._dataProperty=args[v];break;default:this[v]=args[v]}}}if(!this.name){throw new Error("JSDO: JSDO constructor is missing the value for 'name'")}if(this._events){if(typeof this._events!=="object"){throw new Error("JSDO: JSDO constructor event object is not defined as an object")}for(var prop in this._events){var evt=this._events[prop];if(!(evt instanceof Array)){throw new Error("JSDO: JSDO constructor event object for "+prop+" must be an array")}evt.forEach(function(el){if(typeof el!=="object"){throw new Error("JSDO: JSDO constuctor event object for "+prop+" is not defined as an object")}if(typeof el.fn!=="function"){throw new Error("JSDO: JSDO event listener for "+prop+" is not a function.")}if(el.scope&&typeof el.scope!=="object"){throw new Error("JSDO: JSDO event listener scope for "+prop+" is not an object.")}})}}if(this.name){this._resource=progress.data.ServicesManager.getResource(this.name);if(this._resource){if(!this.url)this.url=this._resource.url;if(!this._dataSetName&&this._resource._dataSetName){this._dataSetName=this._resource._dataSetName;if(this._resource.dataProperty){var buffer=this[this._resource.dataProperty]=new progress.data.JSTableRef(this,this._resource.dataProperty);this._buffers[this._resource.dataProperty]=buffer}else{for(var tableName in this._resource.fields){var buffer=this[tableName]=new progress.data.JSTableRef(this,tableName);this._buffers[tableName]=buffer}}}if(!this._dataProperty&&this._resource.dataProperty)this._dataProperty=this._resource.dataProperty;if(!this._dataSetName){var tableName=this._dataProperty?this._dataProperty:"";this._buffers[tableName]=new progress.data.JSTableRef(this,tableName);if(tableName)this[tableName]=this._buffers[tableName]}var properties,tableName;if(this._dataSetName&&this._resource.schema&&this._resource.schema.properties[this._dataSetName]){properties=this._resource.schema.properties[this._dataSetName].properties;if(Object.keys(properties).length===1){tableName=Object.keys(properties)[0];if(properties[tableName].idProperty){this._resource.idProperty=properties[tableName].idProperty}}}else if(this._resource.schema&&this._resource.schema.properties&&this._resource.schema.properties[tableName]&&this._resource.schema.properties[tableName].idProperty){this._resource.idProperty=this._resource.schema.properties[tableName].idProperty}for(var fnName in this._resource.fn){this[fnName]=this._resource.fn[fnName]["function"]}this._hasCUDOperations=this._resource.generic["create"]!==undefined||this._resource.generic["update"]!==undefined||this._resource.generic["delete"]!==undefined;this._hasSubmitOperation=this._resource.generic["submit"]!==undefined;if(!this._session){var myservice=progress.data.ServicesManager.getService(this._resource.service.name);this._session=myservice._session;this._session._pushJSDOs(this)}}else{throw new Error(msg.getMsgText("jsdoMSG004",this.name))}}else{this._buffers[""]=new progress.data.JSTableRef(this,"")}if(!this._session){throw new Error("JSDO: Unable to get user session for resource '"+this.name+"'")}for(var buf in this._buffers){this._buffers[buf]._parent=null;this._buffers[buf]._children=[];this._buffers[buf]._relationship=null;this._buffers[buf]._isNested=false;if(!this._defaultTableRef)this._defaultTableRef=this._buffers[buf];this._numBuffers++}if(this._numBuffers!=1)this._defaultTableRef=null;else{this.record=null}if(typeof Object.defineProperty=="function"){this._caseSensitive=false;Object.defineProperty(this,"caseSensitive",{get:function(){return this._caseSensitive},set:function(value){this._caseSensitive=value?true:false;for(var buf in this._buffers){this._buffers[buf].caseSensitive=this._caseSensitive}},enumerable:true,writeable:true});this._autoSort=true;Object.defineProperty(this,"autoSort",{get:function(){return this._autoSort},set:function(value){this._autoSort=value?true:false;for(var buf in this._buffers){this._buffers[buf].autoSort=this._autoSort}},enumerable:true,writeable:true})}this._properties={};if(typeof Object.defineProperty=="function"){Object.defineProperty(this,"this._properties",{get:function(){return this._properties},enumerable:false})}if(this._resource&&this._resource.fields){for(var buf in this._buffers){this._buffers[buf]._schema=this._resource.fields[buf];this._buffers[buf]._primaryKeys=this._resource.primaryKeys[buf];this._buffers[buf]._fields={};var fields=this._buffers[buf]._schema;for(var i=0;i1){for(var buf in this._buffers){var fields=[];var found=false;for(var i=0;i=0?index+1:"");element.value=value?value[index]:undefined;return element};this.isDataSet=function(){return this._dataSetName?true:false};this._invokeComplete=function(jsdo,success,request){if(request.async&&request.fnName){jsdo.trigger("afterInvoke",request.fnName,jsdo,success,request)}if(request.deferred){if(success){request.deferred.resolve(jsdo,success,request)}else{request.deferred.reject(jsdo,success,request)}}};this._invokeSuccess=function(){};this._invokeError=function(){};this._httpRequest=function(xhr,method,url,reqBody,request){function afterOpenRequest(){var input=null;if(reqBody){xhr.setRequestHeader("Content-Type","application/json; charset=utf-8");input=JSON.stringify(reqBody)}try{xhr.send(input)}catch(e){request.success=false;request.exception=e;xhr.jsdo._session._checkServiceResponse(xhr,request.success,request)}}if(!xhr){xhr=new XMLHttpRequest;xhr.onCompleteFn=this._invokeComplete;xhr.onSuccessFn=this._invokeSuccess;xhr.onErrorFn=this._invokeError;xhr.onreadystatechange=this.onReadyStateChangeGeneric;if(request.async&&request.fnName){this.trigger("beforeInvoke",request.fnName,this,request)}if(reqBody){if(this._resource&&this._resource.service){var useRequest=this._resource.service.useRequest;if(this._resource.service.settings&&this._resource.service.settings.useRequest!==undefined){useRequest=this._resource.service.settings.useRequest}if(useRequest){reqBody={request:reqBody}}}}}xhr.request=request;xhr.jsdo=this;request.jsdo=this;request.xhr=xhr;this._session._openRequest(xhr,method,url,request.async,afterOpenRequest);return request};this._getDataObject=function(){var dataObject={};if(this._dataSetName){dataObject[this._dataSetName]={};var oldUseRelationships=this.useRelationships;try{this.useRelationships=false;for(var buf in this._buffers){dataObject[this._dataSetName][buf]=this._buffers[buf].getData()}}finally{this.useRelationships=oldUseRelationships}}else{if(this._dataProperty){dataObject[this._dataProperty]=this.getData()}else return this.getData()}return dataObject};this._getDataObjectAsNested=function(){var dataObject={};if(this._dataSetName){dataObject[this._dataSetName]={};try{for(var buf in this._buffers){var bufObj=this._buffers[buf];if(bufObj._isNested)continue;this._nestChildren=false;if(bufObj._children.length>0){for(var i=0;i0){hasErrors=true}}if(hasErrors){this._allRecordsRejected=true;this._someRecordsRejected=true;for(i=0;i0){this._allRecordsRejected=true;this._someRecordsRejected=false;hasCommittedRecords=false;for(i=0;i0&&!param.operations[0].success){this._allRecordsRejected=true;this._someRecordsRejected=true;for(i=0;i0){this._convertForServer=true;this._buffers[buf]._convertForServer=true}}};this._convertRequestData=function(objParam){var buf,beforeData;if(this._convertForServer===false){return}for(buf in this._buffers){if(this._buffers[buf]._convertForServer){if(objParam[this._dataSetName]){if(objParam[this._dataSetName][buf]){this._convertTableData(this._buffers[buf],objParam[this._dataSetName][buf])}beforeData=objParam[this._dataSetName]["prods:before"];if(beforeData&&beforeData[buf]){this._convertTableData(this._buffers[buf],beforeData[buf])}}else if(objParam[buf]){this._convertTableData(this._buffers[buf],objParam[buf])}}}};this._convertTableData=function(tableRef,tableData){var i;for(i=0;i0){this._confirmOperationExists(progress.data.JSDO._OP_DELETE);checkedDelete=true}if(!checkedCreate&&tableRef._added.length>0){this._confirmOperationExists(progress.data.JSDO._OP_CREATE);checkedCreate=true}if(!checkedUpdate&&Object.keys(tableRef._changed).length>0){this._confirmOperationExists(progress.data.JSDO._OP_UPDATE);checkedUpdate=true}if(checkedDelete&&checkedCreate&&checkedUpdate){break}}};this._confirmOperationExists=function(operation){var operationStr=PROGRESS_JSDO_OP_STRING[operation];if(typeof this._resource.generic[operationStr]!=="function"){throw new Error(msg.getMsgText("jsdoMSG046",operationStr.toUpperCase()))}};this.invoke=function(name,object){var deferred,promise;try{var request=this[name](object);if(request.deferred){deferred=request.deferred;promise=request.deferred.promise()}}catch(error){if(progress.util.Deferred.useJQueryPromises){throw error}else{if(!deferred){deferred=new progress.util.Deferred;promise=deferred.promise()}deferred.reject(this,false,{errorObject:error})}}return promise};this._syncTableRef=function(operation,tableRef,batch){var rowData,requestData,jsonObject,dataSetObject;if(tableRef._visited)return;tableRef._visited=true;if(!batch){batch={operations:[]}}else if(!batch.operations){batch.operations=[]}switch(operation){case progress.data.JSDO._OP_CREATE:for(var i=0;i0&&!dataSetJsonObject[tableRef._name])dataSetJsonObject[tableRef._name]=[];for(var i=0;i0||tableRef._added.length>0||hasUpdates){hasChanges=true;break}}return hasChanges};this._addDeletesToChangeSet=function(tableRef,dataSetJsonObject,request){for(var i=0;i=10){tmpIndex={};for(var i=0;ivalue2||value1===null)return false;else if(value11){for(var buf in this._buffers){if(this._buffers[buf]._isNested&&this._buffers[buf]._parent&&this._buffers[this._buffers[buf]._parent]){var srcData=this._buffers[this._buffers[buf]._parent]._data;var data=[];for(var i=0;i1){xhr.request.success=false;throw new Error(msg.getMsgText("jsdoMSG100"))}for(var i=0;i1){xhr.request.success=false;throw new Error(msg.getMsgText("jsdoMSG100"))}for(var i=0;i1){xhr.request.success=false;throw new Error(msg.getMsgText("jsdoMSG100"))}var recordId=beforeTableJsonObject[0]["prods:clientId"];if(!recordId){throw new Error(msg.getMsgText("jsdoMSG035","_checkForDeleteError()"))}if(beforeTableJsonObject[0]["prods:hasErrors"]){var prods_id=beforeTableJsonObject[0]["prods:id"];var errorString=this._getErrorStringFromJsonObject(dataSetJsonObject,tableRef,prods_id);this._setErrorString(tableRef,recordId,errorString,true);hasError=true}}return hasError};this._mergeUpdateForSubmit=function(jsonObject,xhr){var errorString;if(!this._dataSetName){throw new Error(msg.getMsgText("jsdoMSG036","_mergeUpdateForSubmit()"))}var dataSetJsonObject=jsonObject[this._dataSetName];if(dataSetJsonObject[this._dataSetName])dataSetJsonObject=dataSetJsonObject[this._dataSetName];var beforeJsonObject=dataSetJsonObject["prods:before"];for(var buf in this._buffers){var tableRef=this._buffers[buf];var tableJsonObject=dataSetJsonObject[tableRef._name];if(tableJsonObject instanceof Array){for(var i=0;i1){request.success=false;throw new Error(msg.getMsgText("jsdoMSG100"))}}if(beforeJsonObject){hasError=jsdo._checkForDeleteError(dataSetJsonObject,xhr)}if(hasError)request.success=false;if(jsdo.autoApplyChanges){if(!hasError){delete request.jsrecord._tableRef._beforeImage[request.jsrecord.data._id]}else{jsdo._deleteError(jsdo,success,request)}}};this._deleteError=function(jsdo,success,request){if(jsdo.autoApplyChanges){jsdo._undoDelete(request.jsrecord._tableRef,request.jsrecord.data._id)}};this._createComplete=function(jsdo,success,request){var xhr=request.xhr;var jsrecord=request.jsrecord;try{jsdo._deleteProdsProperties(jsrecord.data,false);jsrecord._tableRef.trigger("afterCreate",jsdo,jsrecord,request.success,request);jsdo.trigger("afterCreate",jsdo,jsrecord,request.success,request)}finally{request.complete=true;jsdo._checkSaveComplete(xhr)}};this._createSuccess=function(jsdo,success,request){var xhr=request.xhr;var record=request.response;var hasError=jsdo._mergeUpdateForCUD(record,xhr);if(hasError)request.success=false;if(jsdo.autoApplyChanges){if(!hasError){delete request.jsrecord._tableRef._beforeImage[request.jsrecord.data._id]}else{jsdo._createError(jsdo,success,request)}}};this._createError=function(jsdo,success,request){if(jsdo.autoApplyChanges){jsdo._undoCreate(request.jsrecord._tableRef,request.jsrecord.data._id)}};this._updateComplete=function(jsdo,success,request){var xhr=request.xhr;var jsrecord=request.jsrecord;try{jsdo._deleteProdsProperties(jsrecord.data,false);jsrecord._tableRef.trigger("afterUpdate",jsdo,jsrecord,request.success,request);jsdo.trigger("afterUpdate",jsdo,jsrecord,request.success,request)}finally{request.complete=true;jsdo._checkSaveComplete(xhr)}};this._updateSuccess=function(jsdo,success,request){var xhr=request.xhr;var hasError=jsdo._mergeUpdateForCUD(request.response,xhr);if(hasError){request.success=false}if(jsdo.autoApplyChanges){if(!hasError){request.success=true;delete request.jsrecord._tableRef._beforeImage[request.jsrecord.data._id]}else{jsdo._updateError(jsdo,success,request)}}};this._updateError=function(jsdo,success,request){if(jsdo.autoApplyChanges){request.success=false;jsdo._undoUpdate(request.jsrecord._tableRef,request.jsrecord.data._id)}};this._saveChangesSuccess=function(jsdo,success,request){var records=request.response;jsdo._mergeUpdateForSubmit(records,request.xhr);jsdo._clearErrors();var changes=jsdo.getChanges();jsdo._updateLastErrors(jsdo,null,changes);jsdo._setAllRecordsRejected(changes);if(jsdo.autoApplyChanges){jsdo._applyChanges()}};this._saveChangesError=function(jsdo,success,request){jsdo._setAllRecordsRejected(true);if(jsdo.autoApplyChanges){jsdo.rejectChanges()}jsdo._updateLastErrors(jsdo,null,null,request)};this._saveChangesSuccessTT=function(jsdo,success,request){var changes;jsdo._clearErrors();changes=jsdo.getChanges();jsdo._updateLastErrors(jsdo,null,changes);jsdo._setAllRecordsRejected(false)};this._saveChangesComplete=function(jsdo,success,request){if(request.xhr.status>=200&&request.xhr.status<300&&(jsdo._lastErrors.length>0||jsdo._someRecordsRejected)){request.success=false}if(jsdo._useSubmit===true){jsdo._fireCUDTriggersForSubmit(request)}jsdo._undefWorkingRecord();jsdo._fireAfterSaveChanges(request.success,request)};this._fireAfterSaveChanges=function(success,request){this.trigger("afterSaveChanges",this,success,request);if(request.jsrecords){if(request.deferred){if(success){request.deferred.resolve(this,success,request)}else{request.deferred.reject(this,success,request)}}}else if(request.batch&&request.batch.deferred){if(success){request.batch.deferred.resolve(this,success,request)}else{request.batch.deferred.reject(this,success,request)}}var clearErrorString=this.autoApplyChanges;if(request.jsrecords){for(var idx=0;idx=400&&request.xhr.status<600){try{var responseObject=JSON.parse(request.xhr.responseText);if(responseObject instanceof Array){errorArray=responseObject}else if(responseObject instanceof Object){errorArray.push(responseObject)}for(i=0;i=400&&request.xhr.status<600)){errors.push({type:progress.data.JSDO.ERROR,error:"Error: HTTP Status "+request.xhr.status+" "+request.xhr.statusText,responseText:request.xhr.responseText})}}return errors};this._updateLastErrors=function(jsdo,batch,changes,request){var errors,errorText,responseObject,i,j,buf;if(batch){if(batch.operations===undefined)return;for(i=0;i=200&&request.xhr.status<300){jsdo._lastErrors.push({errorString:request.jsrecord.data._errorString});jsdo._buffers[request.jsrecord._tableRef._name]._lastErrors.push({type:progress.data.JSDO.DATA_ERROR,id:request.jsrecord.data._id,error:request.jsrecord.data._errorString})}else{errors=this._getErrorsFromRequest(request);errorText="";for(j=0;j1&&errors[j].error.indexOf("(7243)")!=-1){continue}if(request.jsrecord&&(errors[j].type===progress.data.JSDO.APP_ERROR||errors[j].type===progress.data.JSDO.RETVAL)){errors[j].id=request.jsrecord.data._id;request.jsrecord._tableRef._lastErrors.push(errors[j])}if(errorText.length===0){errorText=errors[j].error}else{errorText+="\n"+errors[j].error}}jsdo._lastErrors.push({errorString:errorText})}}}}else if(changes instanceof Array){for(i=0;i=400&&request.xhr.status<600||request.xhr.status===0)){errors=this._getErrorsFromRequest(request);errorText="";for(j=0;j1&&errors[j].error.indexOf("(7243)")!=-1){continue}for(buf in this._buffers){this._buffers[buf]._lastErrors.push(errors[j])}if(errorText.length===0){errorText=errors[j].error}else{errorText+="\n"+errors[j].error}}jsdo._lastErrors.push({errorString:errorText})}};this._checkSaveComplete=function(xhr){if(xhr.request){var jsdo=xhr.request.jsdo;var batch=xhr.request.batch;if(jsdo&&batch&&jsdo._async){if(jsdo._isBatchComplete(batch)){var success=jsdo._isBatchSuccess(batch);var request={batch:batch,success:success};jsdo._undefWorkingRecord();jsdo._lastErrors=[];if(!success&&batch.operations){jsdo._updateLastErrors(jsdo,batch,null)}this._setAllRecordsRejected(batch);jsdo._fireAfterSaveChanges(success,request)}}}};this._isBatchSuccess=function(batch){if(batch.operations){for(var i=0;i=200&&xhr.status<300||xhr.status===0&&xhr.responseText!==""){request.success=true;xhr.jsdo._session._saveClientContextId(xhr);if(typeof xhr.onSuccessFn=="function"){var operation;if(xhr.request.fnName!==undefined&&xhr.jsdo._resource.fn[xhr.request.fnName]!==undefined){operation=xhr.jsdo._resource.fn[xhr.request.fnName].operation}else operation=null;if(operation===undefined||operation!==null&&operation.mergeMode)xhr.jsdo._mergeInvoke(request.response,xhr);if(request.success)xhr.onSuccessFn(xhr.jsdo,request.success,request);else if(typeof xhr.onErrorFn=="function")xhr.onErrorFn(xhr.jsdo,request.success,request)}}else{request.success=false;if(xhr.status===0){request.exception=new Error(msg.getMsgText("jsdoMSG101"))}if(typeof xhr.onErrorFn=="function"){xhr.onErrorFn(xhr.jsdo,request.success,request)}}}catch(e){request.success=false;request.exception=e;if(typeof xhr.onErrorFn=="function"){xhr.onErrorFn(xhr.jsdo,request.success,request)}}xhr.jsdo._session._checkServiceResponse(xhr,request.success,request);if(typeof xhr.onCompleteFn=="function"){xhr.onCompleteFn(xhr.jsdo,request.success,request)}}catch(e){request.success=false;request.exception=e;if(typeof xhr.onErrorFn=="function"){xhr.onErrorFn(xhr.jsdo,request.success,request)}}}};this.acceptChanges=function(){for(var buf in this._buffers){this._buffers[this._buffers[buf]._name].acceptChanges()}};this.rejectChanges=function(){for(var buf in this._buffers){this._buffers[this._buffers[buf]._name].rejectChanges()}};this.getChanges=function(){var result=[];for(var buf in this._buffers){var changes=this._buffers[this._buffers[buf]._name].getChanges();result=result.concat(changes)}return result};this.hasChanges=function(){for(var buf in this._buffers){if(this._buffers[this._buffers[buf]._name].hasChanges())return true}return false};this._applyChanges=function(){for(var buf in this._buffers){this._buffers[this._buffers[buf]._name]._applyChanges()}};this.acceptRowChanges=function(){if(this._defaultTableRef)return this._defaultTableRef.acceptRowChanges();throw new Error(msg.getMsgText("jsdoMSG001","acceptRowChanges()"))};this.rejectRowChanges=function(){if(this._defaultTableRef)return this._defaultTableRef.rejectRowChanges();throw new Error(msg.getMsgText("jsdoMSG001","rejectRowChanges()"))};this.setProperties=function(propertiesObject){var prop;if(arguments.length<1){throw new Error(progress.data._getMsgText("jsdoMSG122","JSDO","setProperties",1))}if(arguments.length>1){throw new Error(progress.data._getMsgText("jsdoMSG122","JSDO","setProperties",1))}if(typeof propertiesObject=="object"){this._properties={};for(prop in propertiesObject){if(propertiesObject.hasOwnProperty(prop)){if(typeof propertiesObject[prop]!=="function"){this._properties[prop]=propertiesObject[prop]}}}}else if(propertiesObject===undefined||propertiesObject===null){this._properties={}}else{throw new Error(progress.data._getMsgText("jsdoMSG121","JSDO",1,"Object","setProperties"))}};this.setProperty=function(propertyName,propertyValue){if(arguments.length<2){throw new Error(progress.data._getMsgText("jsdoMSG122","JSDO","setProperty",2))}if(arguments.length!==2){throw new Error(progress.data._getMsgText("jsdoMSG122","JSDO","setProperty",2))}if(typeof propertyName!=="string"){throw new Error(progress.data._getMsgText("jsdoMSG121","JSDO",1,"string","setProperty"))}if(propertyValue===undefined){delete this._properties[propertyName]}else{this._properties[propertyName]=propertyValue}};this.getProperties=function(){if(arguments.length>0){throw new Error(progress.data._getMsgText("jsdoMSG122","JSDO","getProperties",0))}return this._properties};this.getProperty=function(propertyName){if(arguments.length<1){throw new Error(progress.data._getMsgText("jsdoMSG122","JSDO","getProperty",1))}if(arguments.length>1){throw new Error(progress.data._getMsgText("jsdoMSG122","JSDO","getProperty",1))}return this._properties[propertyName]};this.saveLocal=function saveLocal(arg1,arg2){var name;var dataMode;if(arguments.length>2){throw new Error(msg.getMsgText("jsdoMSG024","JSDO",arguments.callee.name+"()"))}if(typeof arg1=="string"||arg1===null||arg1===undefined){name=arg1;dataMode=arg2}else{name=null;dataMode=arg1}if(name===undefined||name===null||name===""){name="jsdo_"+this._resource.service.name+"_"+this._resource.name}if(typeof dataMode=="undefined"){dataMode=progress.data.JSDO.ALL_DATA}else{switch(dataMode){case progress.data.JSDO.ALL_DATA:case progress.data.JSDO.CHANGES_ONLY:break;default:throw new Error(msg.getMsgText("jsdoMSG115",arguments.callee.name))}}if(this._localStorage===null){this._localStorage=new progress.data.LocalStorage}var dataObj=this._prepareDataObjectForLocalStorage(dataMode);this._localStorage.saveToLocalStorage(name,dataObj)};this.readLocal=function readLocal(name){if(arguments.length>1){throw new Error(msg.getMsgText("jsdoMSG024","JSDO",arguments.callee.name+"()"))}if(name===undefined||name===null||name===""){name="jsdo_"+this._resource.service.name+"_"+this._resource.name}else if(typeof name!="string"){throw new Error(msg.getMsgText("jsdoMSG116","name",arguments.callee.name+"()"))}if(this._localStorage===null){this._localStorage=new progress.data.LocalStorage}var object=this._localStorage.readFromLocalStorage(name);if(object){if(this._hasMatchingSchema(object)===false)throw new Error(msg.getMsgText("jsdoMSG117",name));this._restoreFromLocalStorage(object,progress.data.JSDO.MODE_EMPTY)}return object!==null};this.addLocalRecords=function addLocalRecords(arg1,arg2,arg3){var name;var addMode;var keyFields;if(arguments.length<1){throw new Error(msg.getMsgText("jsdoMSG024","JSDO",arguments.callee.name+"()"))}if(typeof arg1=="string"){name=arg1;addMode=arg2;keyFields=arg3}else{name="jsdo_"+this._resource.service.name+"_"+this._resource.name;addMode=arg1;keyFields=arg2}if(typeof name=="undefined"||name===null||name===""){name="jsdo_"+this._resource.service.name+"_"+this._resource.name}else if(typeof name!="string"){throw new Error(msg.getMsgText("jsdoMSG116","name",arguments.callee.name+"()"))}if(addMode!=progress.data.JSDO.MODE_REPLACE){throw new Error(msg.getMsgText("jsdoMSG115",arguments.callee.name))}if(this._localStorage===null){this._localStorage=new progress.data.LocalStorage}var object=this._localStorage.readFromLocalStorage(name);if(object){if(this._hasMatchingSchema(object)===false)throw new Error(msg.getMsgText("jsdoMSG117",name));try{this._restoreFromLocalStorage(object,addMode,keyFields)}catch(e){var text=e.message;throw new Error(text.replace(new RegExp("addRecords","g"),"addLocalRecords"))}}return object!==null};this._containsPrimaryKeys=function _containsPrimaryKeys(){for(var buf in this._buffers){if(this._buffers[buf]._primaryKeys===null)return false}return true};this._hasMatchingSchema=function _hasMatchingSchema(storageObject){var isValid=true;if(storageObject===null||Object.keys(storageObject).length===0)return true;if(this._dataSetName){if(storageObject[this._dataSetName]){for(var buf in this._buffers)if(storageObject[this._dataSetName][buf]===undefined){isValid=false;break}}else isValid=false}else if(this._dataProperty){storageObject=storageObject["_localStorage"];if(storageObject===undefined||storageObject[this._dataProperty]===undefined)isValid=false}else{storageObject=storageObject["_localStorage"];if(storageObject===undefined||storageObject[this._defaultTableRef._name]===undefined)isValid=false}return isValid};this.deleteLocal=function deleteLocal(name){if(arguments.length>1){throw new Error(msg.getMsgText("jsdoMSG024","JSDO",arguments.callee.name+"()"))}if(name===undefined||name===null||name===""){name="jsdo_"+this._resource.service.name+"_"+this._resource.name}else if(typeof name!="string"){throw new Error(msg.getMsgText("jsdoMSG116","name",arguments.callee.name+"()"))}if(this._localStorage===null){this._localStorage=new progress.data.LocalStorage}this._localStorage.clearLocalStorage(name)};this._prepareDataObjectForLocalStorage=function(option){var storageObject={};if(this._dataSetName){switch(option){case progress.data.JSDO.ALL_DATA:storageObject=this._createDataAndChangeSet(this._dataSetName);break;case progress.data.JSDO.CHANGES_ONLY:storageObject=this._createChangeSet(this._dataSetName,true);break}}else if(this._dataProperty){switch(option){case progress.data.JSDO.ALL_DATA:storageObject=this._createDataAndChangeSet("_localStorage");break;case progress.data.JSDO.CHANGES_ONLY:storageObject=this._createChangeSet("_localStorage",true);break}}else{switch(option){case progress.data.JSDO.ALL_DATA:storageObject=this._createDataAndChangeSet("_localStorage");break;case progress.data.JSDO.CHANGES_ONLY:storageObject=this._createChangeSet("_localStorage",true);break}}return storageObject};this._restoreFromLocalStorage=function(storageObject,addMode,keyFields){if(storageObject&&Object.keys(storageObject).length>0){if(this._dataSetName){for(var buf in this._buffers)this._restoreDataForTable(this._buffers[buf],storageObject,addMode,keyFields)}else this._restoreDataForTable(this._defaultTableRef,storageObject,addMode,keyFields)}else if(addMode===progress.data.JSDO.MODE_EMPTY)this._clearData()};this._restoreDataForTable=function(tableRef,jsonObject,addMode,keyFields){keyFields=keyFields!==undefined?keyFields:tableRef._primaryKeys;if(keyFields===undefined&&this._resource.idProperty){keyFields=[];keyFields[0]=this._resource.idProperty}if(this._dataSetName){var oldUseRelationships=this.useRelationships;this.useRelationships=false;try{tableRef.addRecords(jsonObject,addMode,keyFields)}finally{this.useRelationships=oldUseRelationships}}else{this._dataSetName="_localStorage";tableRef.addRecords(jsonObject,addMode,keyFields);this._dataSetName=null}};this.getMethodProperties=function(operation,name){var idx;if(this._resource._operations){if(this._resource._operations[operation]){return this._resource._operations[operation]}}else{this._resource._operations={}}for(var idx=0;idx1?[params.sort]:[]}sortFields="";for(index=0;index=1?params.filter:undefined}if(params.filter){if(typeof params.filter==="string"){doConversion=false}params.tableRef=tableName;if(doConversion&¶ms.tableRef===undefined){throw new Error(msg.getMsgText("jsdoMSG045","fill() or read()","params","tableRef"))}if(reqCapabilities["filter"].mapping==="ablFilter"){if(doConversion){ablFilter=progress.util._convertToABLWhereString(jsdo._buffers[params.tableRef],params.filter)}else{ablFilter=params.filter}}else if(reqCapabilities["filter"].mapping==="sqlQuery"){if(doConversion){sqlQuery=progress.util._convertToSQLQueryString(jsdo._buffers[params.tableRef],params.filter,true)}else{sqlQuery=params.filter}}}filter=JSON.stringify({ablFilter:ablFilter,tableRef:params.tableRef,viewTables:jsdo.viewTables,sqlQuery:sqlQuery,orderBy:sortFields,skip:params.skip,top:params.top,id:params.id});params={filter:filter}}return params}});if(typeof progress.ui=="undefined")progress.ui={};progress.ui.UITableRef=function UITableRef(tableRef){this._tableRef=tableRef;this._listview=null;this._detailPage=null;this._listviewContent=undefined;this.addItem=function(format){var detailForm;if(!this._tableRef.record)throw new Error(msg.getMsgText("jsdoMSG002",this._name));if(!this._listview)return;format=format?format:this._listview.format;detailForm=this._detailPage&&this._detailPage.name?this._detailPage.name:"";if(this._listviewContent===undefined){this.clearItems()}var text=this._listview.itemTemplate?this._listview.itemTemplate:progress.ui.UIHelper._itemTemplate;text=text.replace(new RegExp("{__format__}","g"),format);text=text.replace(new RegExp("{__id__}","g"),this._tableRef.record.data._id);text=text.replace(new RegExp("{__page__}","g"),detailForm);for(var field in this._tableRef.record.data){var value=this._tableRef.record.data[field];text=text.replace(new RegExp("{"+field+"}","g"),value!==undefined&&value!==null?value:"")}this._listviewContent+=text};this.clearItems=function(){if(this._listview){this._listviewContent="";var listviewElement=document.getElementById(this._listview.name);if(listviewElement){listviewElement.innerHTML=""}}};this._getFormFieldValue=function(fieldName,detailPageName){var value=null,field;if(detailPageName===undefined){if(this._detailPage&&this._detailPage.name)detailPageName=this._detailPage.name}if(typeof $=="function"&&detailPageName){field=$("#"+detailPageName+" #"+fieldName);if(!field||field.length===0)field=$("#"+detailPageName+' [dsid="'+fieldName+'"]');if(field&&field.length==1)value=field.val()}else{field=document.getElementById(fieldName);if(field){value=field.value}}return value};this._setFormField=function(fieldName,value,detailPageName){var field=null;if(detailPageName===undefined){if(this._detailPage&&this._detailPage.name)detailPageName=this._detailPage.name}if(typeof $=="function"&&detailPageName){field=$("#"+detailPageName+" #"+fieldName);if(!field||field.length===0)field=$("#"+detailPageName+' [dsid="'+fieldName+'"]');if(field&&field.length==1)field.val(value)}else{field=document.getElementById(fieldName);if(field){field.value=value}}};this.assign=function(detailPageName){if(!this._tableRef.record)throw new Error(msg.getMsgText("jsdoMSG002",this._tableRef._name));if(arguments.length!==0&&typeof detailPageName!="string")throw new Error(msg.getMsgText("jsdoMSG024","UIHelper","assign()"));this._tableRef.record.assign(null);var fieldName;var schema=this._tableRef.getSchema();for(var i=0;i0){for(var i=0;i0&&fieldName.charAt(0)=="_")continue;if(fields&&fields[fieldName]===undefined)continue;var fieldLabel=this._tableRef._schema[i].title?this._tableRef._schema[i].title:this._tableRef._schema[i].name;var text=this._detailPage&&this._detailPage.fieldTemplate?this._detailPage.fieldTemplate:progress.ui.UIHelper._fieldTemplate;text=text.replace(new RegExp("{__label__}","g"),fieldLabel);text=text.replace(new RegExp("{__name__}","g"),this._tableRef._schema[i].name);htmltext+=text}htmltext+="";fields=null;return htmltext};this.getListViewRecord=function(htmlIElement){var id=htmlIElement.getAttribute("data-id");return this._tableRef.findById(id)};this.getFormRecord=function(detailPageName){var id=this._getFormFieldValue("_id",detailPageName);return this._tableRef.findById(id)};this._getIdOfElement=function(name){if(typeof $=="function"){var element=$("#"+name);if(!element||element.length===0){element=$('[dsid="'+name+'"]');if(element&&element.length==1){var id=element.attr("id");if(id)return id}}}return name};this.setDetailPage=function setDetailPage(obj){if(!obj||typeof obj!="object")throw new Error(msg.getMsgText("jsdoMSG012",arguments.callee.name,"object"));if(!obj.name||typeof obj.name!="string")throw new Error(msg.getMsgText("jsdoMSG012",arguments.callee.name,"name"));this._detailPage=obj;this._detailPage.name=this._getIdOfElement(this._detailPage.name)};this.setListView=function setListView(obj){if(!obj||typeof obj!="object")throw new Error(msg.getMsgText("jsdoMSG012",arguments.callee.name,"object"));if(!obj.name||typeof obj.name!="string")throw new Error(msg.getMsgText("jsdoMSG012",arguments.callee.name,"name"));if(obj.format&&typeof obj.name!="string")throw new Error(msg.getMsgText("jsdoMSG012",arguments.callee.name,"format"));this._listview=obj;this._listview.name=this._getIdOfElement(this._listview.name);if(!this._listview.format){if(typeof $=="function"){for(var i=0;i{__format__}';progress.ui.UIHelper._defaultFieldTemplate='
'+''+'
';progress.ui.UIHelper._itemTemplate=progress.ui.UIHelper._defaultItemTemplate;progress.ui.UIHelper._fieldTemplate=progress.ui.UIHelper._defaultFieldTemplate;progress.ui.UIHelper.setItemTemplate=function(template){progress.ui.UIHelper._itemTemplate=template?template:progress.ui.UIHelper._defaultItemTemplate};progress.ui.UIHelper.setFieldTemplate=function(template){progress.ui.UIHelper._fieldTemplate=template?template:progress.ui.UIHelper._defaultFieldTemplate}})();(function(){if(progress===undefined){progress={}}if(progress.data===undefined){progress.data={}}progress.data.ServicesManager={};progress.data.ServicesManager._services=[];progress.data.ServicesManager._resources=[];progress.data.ServicesManager._data=[];progress.data.ServicesManager._sessions=[];progress.data.ServicesManager._jsdosessions=[];progress.data.ServicesManager.addResource=function(id,resource){if(progress.data.ServicesManager._resources[id]===undefined){progress.data.ServicesManager._resources[id]=resource}else{throw new Error("A resource named '"+id+"' was already loaded.")}};progress.data.ServicesManager.getResource=function(id){return progress.data.ServicesManager._resources[id]};progress.data.ServicesManager.addService=function(id,service){if(progress.data.ServicesManager._services[id]===undefined){progress.data.ServicesManager._services[id]=service}else{throw new Error("A service named '"+id+"' was already loaded.")}};progress.data.ServicesManager.getService=function(id){return progress.data.ServicesManager._services[id]};progress.data.ServicesManager.addSession=function(catalogURI,session){if(progress.data.ServicesManager._sessions[catalogURI]===undefined){progress.data.ServicesManager._sessions[catalogURI]=session}else{throw new Error("Cannot load catalog '"+catalogURI+"' multiple times.")}};progress.data.ServicesManager.addJSDOSession=function(catalogURI,jsdosession){if(progress.data.ServicesManager._jsdosessions[catalogURI]===undefined){progress.data.ServicesManager._jsdosessions[catalogURI]=jsdosession}else{throw new Error("Cannot load catalog '"+catalogURI+"' multiple times.")}};progress.data.ServicesManager.getSession=function(catalogURI){try{return progress.data.ServicesManager._sessions[catalogURI]}catch(e){return null}};progress.data.ServicesManager.cleanSession=function(session){var servicesKey,resourcesKey,sessionsKey,service,services=progress.data.ServicesManager._services,resources=progress.data.ServicesManager._resources,sessions=progress.data.ServicesManager._sessions,jsdosessions=progress.data.ServicesManager._jsdosessions;for(servicesKey in services){service=null;if(services[servicesKey]._session===session){service=services[servicesKey];delete services[servicesKey]}if(!service){continue}for(resourcesKey in resources){if(resources[resourcesKey].service===service){delete resources[resourcesKey]}}}for(sessionsKey in sessions){if(sessions[sessionsKey]===session){delete sessions[sessionsKey];if(jsdosessions[sessionsKey]){delete jsdosessions[sessionsKey]}}}};function extractParamsFromURL(url){var urlParams=[],paramName=null;if(typeof url==="string"){url.split("").forEach(function(c){if(c==="{"){paramName=""}else if(c==="}"){if(paramName){urlParams.push(paramName)}paramName=null}else if(paramName!==null){paramName+=c}})}return urlParams}progress.data.ServicesManager.addCatalog=function(services,session){var name,value;if(!services){throw new Error("Cannot find 'services' property in catalog file.")}if(services instanceof Array){services.forEach(function(service){if(progress.data.ServicesManager.getService(service.name)!==undefined){throw new Error("A service named '"+service.name+"' was already loaded.")}if(service.resources instanceof Array){service.resources.forEach(function(resource){if(progress.data.ServicesManager.getResource(resource.name)!==undefined){throw new Error("A resource named '"+resource.name+"' was already loaded.")}})}else{throw new Error("Missing 'resources' array in catalog.")}});for(var j=0;j1){throw new Error(progress.data._getMsgText("jsdoMSG122","Session","setContext",1))}if(typeof context==="object"){contextObject={};for(prop in context){if(context.hasOwnProperty(prop)){if(typeof context[prop]!=="function"){contextObject[prop]=context[prop]}}}}else if(context===undefined||context===null){contextObject={}}else{throw new Error(progress.data._getMsgText("jsdoMSG121","Session",1,"Object","setContextProperty"))}contextString=null};this.getContext=function(){if(arguments.length>0){throw new Error(progress.data._getMsgText("jsdoMSG122","Session","getContext",0))}return contextObject};this.getContextProperty=function(propertyName){if(arguments.length<1){throw new Error(progress.data._getMsgText("jsdoMSG122","Session","getContextProperty",1))}if(arguments.length>1){throw new Error(progress.data._getMsgText("jsdoMSG122","Session","getContextProperty",1))}return contextObject[propertyName]}};progress.data.Session=function Session(options){var defPropSupported=false;if(typeof Object.defineProperty==="function"){defPropSupported=true}var that=this,jsdosession,isUserAgentiOS=false,isFirefox=false,isEdge=false,isIE=false,canPassCredentialsToOpenWithCORS=false,defaultiOSBasicAuthTimeout=4e3,deviceIsOnline=true,restApplicationIsOnline=false,oepingAvailable=false,hasResolvedPingURI=false,defaultPartialPingURI="/rest/_oepingService/_oeping",classicPartialPingURI="/rest/_oeping",partialPingURI=defaultPartialPingURI,_storageKey,_authProvider=null,customCredentials=false,storedAuthModel,storedURI,newURI,stateWasReadFromStorage=false;if(!options||options._silent!==true){console.warn("Session: As of JSDO 4.4, the Session object has been deprecated. "+"Please use the JSDOSession object instead.")}if(typeof navigator!=="undefined"){if(typeof navigator.userAgent!=="undefined"){isUserAgentiOS=navigator.userAgent.match(/(iPad)|(iPhone)|(iPod)/i);isFirefox=navigator.userAgent.toLowerCase().indexOf("firefox")>-1;isEdge=navigator.userAgent.indexOf("Edge/")>-1;isIE=navigator.userAgent.indexOf("Trident/")>-1||navigator.userAgent.indexOf("MSIE 10")>-1}}canPassCredentialsToOpenWithCORS=!(isFirefox||isEdge||isIE);function canPassCredentialsToOpen(){return canPassCredentialsToOpenWithCORS}this._onlineHandler=function(){setDeviceIsOnline(true);that.trigger("online",that,null)};this._offlineHandler=function(){setDeviceIsOnline(false);that.trigger("offline",that,progress.data.Session.DEVICE_OFFLINE,null)};if(typeof window!=="undefined"&&window.addEventListener){window.addEventListener("online",this._onlineHandler,false);window.addEventListener("offline",this._offlineHandler,false)}var _catalogURIs=[];var _services=[];var _jsdos=[];this.onOpenRequest=null;var _password=null;if(defPropSupported){var _userName=null;Object.defineProperty(this,"userName",{get:function(){return _userName},enumerable:true});var _loginTarget="/static/home.html";Object.defineProperty(this,"loginTarget",{get:function(){return _loginTarget},enumerable:true});var _serviceURI=null;Object.defineProperty(this,"serviceURI",{get:function(){return _serviceURI},enumerable:true});Object.defineProperty(this,"catalogURIs",{get:function(){return _catalogURIs},enumerable:true});Object.defineProperty(this,"services",{get:function(){return _services},enumerable:true});var _loginResult=null;Object.defineProperty(this,"loginResult",{get:function(){return _loginResult},enumerable:true});var _loginHttpStatus=null;Object.defineProperty(this,"loginHttpStatus",{get:function(){return _loginHttpStatus},enumerable:true});var _clientContextId=null;Object.defineProperty(this,"clientContextId",{get:function(){return _clientContextId},enumerable:true});var _authenticationModel=progress.data.Session.AUTH_TYPE_ANON;Object.defineProperty(this,"authenticationModel",{get:function(){return _authenticationModel},set:function(newval){if(newval){newval=newval.toLowerCase()}switch(newval){case progress.data.Session.AUTH_TYPE_FORM:case progress.data.Session.AUTH_TYPE_BASIC:case progress.data.Session.AUTH_TYPE_ANON:case progress.data.Session.AUTH_TYPE_SSO:case progress.data.Session.AUTH_TYPE_BEARER:case null:_authenticationModel=newval;storeSessionInfo("authenticationModel",newval);break;default:throw new Error("Error setting Session.authenticationModel. '"+newval+"' is an invalid value.")}},enumerable:true});var _lastSessionXHR=null;Object.defineProperty(this,"lastSessionXHR",{get:function(){return _lastSessionXHR},enumerable:true});Object.defineProperty(this,"connected",{get:function(){return this.loginResult===progress.data.Session.LOGIN_SUCCESS&&restApplicationIsOnline&&deviceIsOnline},enumerable:true});Object.defineProperty(this,"JSDOs",{get:function(){return _jsdos},enumerable:true});var _pingInterval=0;var _timeoutID=null;Object.defineProperty(this,"pingInterval",{get:function(){return _pingInterval},set:function(newval){if(typeof newval==="number"&&newval>=0){_pingInterval=newval;storeSessionInfo("pingInterval",newval);if(newval>0){if(this.loginResult===progress.data.Session.LOGIN_SUCCESS){_timeoutID=setTimeout(this._autoping,newval)}}else if(newval===0){clearTimeout(_timeoutID);_pingInterval=0}}else{throw new Error("Error setting Session.pingInterval. '"+newval+"' is an invalid value.")}},enumerable:true});var _contextProperties=new progress.data.ContextProperties;Object.defineProperty(this,"_contextProperties",{get:function(){return _contextProperties},enumerable:false});var isInvalidated=false;Object.defineProperty(this,"_isInvalidated",{get:function(){return isInvalidated},enumerable:false});Object.defineProperty(this,"_authProvider",{get:function(){return _authProvider},set:function(newval){if(_authProvider){throw new Error("Internal Error setting Session._authProvider. '"+"The property has already been set.")}setAuthProvider(newval)},enumerable:false})}else{this.userName=null;this.loginTarget="/static/home.html";this.serviceURI=null;this.catalogURIs=[];this.services=[];this.loginResult=null;this.loginHttpStatus=null;this.clientContextId=null;this.authenticationModel=progress.data.Session.AUTH_TYPE_ANON;this.lastSessionXHR=null}function storeSessionInfo(infoName,value){var key;if(that.loginResult===progress.data.Session.LOGIN_SUCCESS&&typeof sessionStorage==="object"&&_storageKey){key=_storageKey;if(infoName){key=key+"."+infoName}if(typeof value!=="undefined"){sessionStorage.setItem(key,JSON.stringify(value))}}}function retrieveSessionInfo(infoName){var key,jsonStr,value=null;if(typeof sessionStorage==="object"&&_storageKey){key=_storageKey;if(infoName){key=key+"."+infoName}jsonStr=sessionStorage.getItem(key);if(jsonStr!==null){try{value=JSON.parse(jsonStr)}catch(e){value=null}}return value}}function clearSessionInfo(infoName){var key;if(typeof sessionStorage==="object"&&_storageKey){key=_storageKey;if(infoName){key=key+"."+infoName;sessionStorage.removeItem(key)}}}function storeAllSessionInfo(){if(_storageKey){storeSessionInfo("loginResult",that.loginResult);storeSessionInfo("userName",that.userName);storeSessionInfo("serviceURI",that.serviceURI);storeSessionInfo("loginHttpStatus",that.loginHttpStatus);storeSessionInfo("authenticationModel",that.authenticationModel);storeSessionInfo("pingInterval",that.pingInterval);storeSessionInfo("oepingAvailable",oepingAvailable);storeSessionInfo("partialPingURI",partialPingURI);storeSessionInfo("clientContextId",that.clientContextId);storeSessionInfo("deviceIsOnline",deviceIsOnline);storeSessionInfo("restApplicationIsOnline",restApplicationIsOnline);if(that._authProvider){storeSessionInfo("_authProvider.init",{uri:that._authProvider.uri,authenticationModel:that._authProvider.authenticationModel})}storeSessionInfo(_storageKey,true)}}function clearAllSessionInfo(){if(_storageKey){if(retrieveSessionInfo(_storageKey)){clearSessionInfo("loginResult");clearSessionInfo("userName");clearSessionInfo("serviceURI");clearSessionInfo("loginHttpStatus");clearSessionInfo("clientContextId");clearSessionInfo("deviceIsOnline");clearSessionInfo("restApplicationIsOnline");clearSessionInfo("authenticationModel");clearSessionInfo("pingInterval");clearSessionInfo("oepingAvailable");clearSessionInfo("partialPingURI");clearSessionInfo("_authProvider.init");clearSessionInfo(_storageKey)}}}function setSessionInfoFromStorage(key){var authproviderInitObject;if(retrieveSessionInfo(key)){setLoginResult(retrieveSessionInfo("loginResult"),this);setUserName(retrieveSessionInfo("userName"),this);setServiceURI(retrieveSessionInfo("serviceURI"),this);setLoginHttpStatus(retrieveSessionInfo("loginHttpStatus"),this);setClientContextID(retrieveSessionInfo("clientContextId"),this);setDeviceIsOnline(retrieveSessionInfo("deviceIsOnline"));setRestApplicationIsOnline(retrieveSessionInfo("restApplicationIsOnline"));that.authenticationModel=retrieveSessionInfo("authenticationModel");that.pingInterval=retrieveSessionInfo("pingInterval");setOepingAvailable(retrieveSessionInfo("oepingAvailable"));setPartialPingURI(retrieveSessionInfo("partialPingURI"));if(!that._authProvider){authproviderInitObject=retrieveSessionInfo("_authProvider.init");if(authproviderInitObject){setAuthProvider(new progress.data.AuthenticationProvider(authproviderInitObject))}}}}function setUserName(newname,sessionObject){if(defPropSupported){_userName=newname}else{sessionObject.userName=newname}storeSessionInfo("userName",newname)}function setLoginTarget(target,sessionObject){if(defPropSupported){_loginTarget=target}else{sessionObject.loginTarget=target}}function setServiceURI(url,sessionObject){if(defPropSupported){_serviceURI=url}else{sessionObject.serviceURI=url}storeSessionInfo("serviceURI",url)}function pushCatalogURIs(url,sessionObject){if(defPropSupported){_catalogURIs.push(url)}else{sessionObject.catalogURIs.push(url)}}function pushService(serviceObject,sessionObject){if(defPropSupported){_services.push(serviceObject)}else{sessionObject.services.push(serviceObject)}}function findService(serviceName){_services.forEach(function(service){if(service.name===serviceName){return service}});return null}function setLoginResult(result,sessionObject){if(defPropSupported){_loginResult=result}else{sessionObject.loginResult=result}if(result===progress.data.Session.LOGIN_SUCCESS){storeSessionInfo("loginResult",result)}else{clearAllSessionInfo()}}function setLoginHttpStatus(status,sessionObject){if(defPropSupported){_loginHttpStatus=status}else{sessionObject.loginHttpStatus=status}storeSessionInfo("loginHttpStatus",status)}function setClientContextIDfromXHR(xhr,sessionObject){if(xhr){setClientContextID(getResponseHeaderNoError(xhr,"X-CLIENT-CONTEXT-ID"),sessionObject)}}function setClientContextID(ccid,sessionObject){if(defPropSupported){_clientContextId=ccid}else{sessionObject.clientContextId=ccid}storeSessionInfo("clientContextId",ccid)}function setLastSessionXHR(xhr,sessionObject){if(defPropSupported){_lastSessionXHR=xhr}else{sessionObject.lastSessionXHR=xhr}}function setDeviceIsOnline(value){deviceIsOnline=value;storeSessionInfo("deviceIsOnline",value)}function setAuthProvider(value){_authProvider=value?value:null}function setRestApplicationIsOnline(value){restApplicationIsOnline=value;storeSessionInfo("restApplicationIsOnline",value)}function setOepingAvailable(value){oepingAvailable=value;storeSessionInfo("oepingAvailable",value)}function setPartialPingURI(value){partialPingURI=value;storeSessionInfo("partialPingURI",value)}function getResponseHeaderNoError(xhr,headerName){var allHeaders=xhr._pdsResponseHeaders,regExp;if(allHeaders===undefined){allHeaders=xhr.getAllResponseHeaders();if(allHeaders){xhr._pdsResponseHeaders=allHeaders}else{xhr._pdsResponseHeaders=null}}if(allHeaders){regExp=new RegExp("^"+headerName+":","mi");if(allHeaders.match(regExp)){return xhr.getResponseHeader(headerName)}}return null}this._pushJSDOs=function(jsdo){_jsdos.push(jsdo)};this._openRequest=function(xhr,verb,url,async,callback){var urlPlusCCID,that=this;function afterOpenAndAuthorize(arg){if(arg instanceof Error){throw arg}else{if(that.clientContextId&&that.clientContextId!=="0"){xhr.setRequestHeader("X-CLIENT-CONTEXT-ID",that.clientContextId)}setRequestHeaderFromContextProps(that,xhr);if(typeof that.onOpenRequest==="function"){var params={xhr:xhr,verb:verb,uri:urlPlusCCID,async:async,formPreTest:false,session:that};that.onOpenRequest(params)}if(callback){callback()}}}if(this._isInvalidated){throw new Error(progress.data._getMsgText("jsdoMSG510","Session"))}if(this.loginResult!==progress.data.Session.LOGIN_SUCCESS&&!this._authProvider&&this.authenticationModel){throw new Error("Attempted to make server request when there is no active session.")}urlPlusCCID=this._prependAppURL(url);urlPlusCCID=this._addCCIDtoURL(urlPlusCCID);if(progress.data.Session._useTimeStamp){urlPlusCCID=progress.data.Session._addTimeStampToURL(urlPlusCCID)}if(this._authProvider){this._authProvider._openRequestAndAuthorize(xhr,verb,urlPlusCCID,async,afterOpenAndAuthorize)}else{this._setXHRCredentials(xhr,verb,urlPlusCCID,this.userName,_password,async);if(this.authenticationModel===progress.data.Session.AUTH_TYPE_FORM){_addWithCredentialsAndAccept(xhr,"application/json")}afterOpenAndAuthorize(xhr)}};this.pingTestCallback=function(cbArgs){var foundOeping=cbArgs.pingResult?true:false;setOepingAvailable(foundOeping)};this._onReadyStateChangeGeneric=function(){var xhr=this;var result;var errorObject;clearTimeout(xhr._requestTimeout);if(xhr.readyState===4){result=null;errorObject=null;if(typeof xhr.onResponseFn==="function"){try{result=xhr.onResponseFn(xhr)}catch(e){errorObject=e}}if(typeof xhr.onResponseProcessedFn==="function"){if(!result){result=progress.data.Session.GENERAL_FAILURE}xhr.onResponseProcessedFn(xhr.pdsession,result,errorObject,xhr)}}};this._disconnect=function(deferred){this._processDisconnectResult(null,deferred)};this._processDisconnectResult=function(xhr,deferred){this._reinitializeAfterLogout(this,progress.data.Session.SUCCESS);this._disconnectComplete(this,progress.data.Session.SUCCESS,null,null,deferred)};this._disconnectComplete=function(pdsession,result,errObj,xhr,deferred){pdsession.trigger("afterDisconnect",pdsession,result,errObj,xhr,deferred)};var pwSave=null;var unameSave=null;this.login=function(serviceURI,loginUserName,loginPassword,loginTarget){var uname,pw,isAsync=false,args=[],deferred,iOSBasicAuthTimeout,uriForRequest;pwSave=null;unameSave=null;if(!defPropSupported){this.authenticationModel=this.authenticationModel.toLowerCase()}if(this.authenticationModel===progress.data.Session.AUTH_TYPE_SSO){throw new Error(progress.data._getMsgText("jsdoMSG057","Session","login()"))}if(this.loginResult===progress.data.Session.LOGIN_SUCCESS||this._authProvider){throw new Error("Attempted to call login() on a Session object that is already logged in.")}if(arguments.length>0){if(arguments[0]&&typeof arguments[0]==="object"){args[0]=arguments[0].serviceURI;args[1]=arguments[0].userName;args[2]=arguments[0].password;args[3]=arguments[0].loginTarget;args[4]=arguments[0].async;deferred=arguments[0].deferred;iOSBasicAuthTimeout=arguments[0].iOSBasicAuthTimeout;if(typeof iOSBasicAuthTimeout==="undefined"){iOSBasicAuthTimeout=defaultiOSBasicAuthTimeout}else if(iOSBasicAuthTimeout&&typeof iOSBasicAuthTimeout!=="number"){throw new Error(progress.data._getMsgText("jsdoMSG033","Session","login","The iOSBasicAuthTimeout argument was invalid."))}}else{args=arguments}}if(args.length>0){if(args[0]){var restURLtemp=args[0];if(restURLtemp[restURLtemp.length-1]==="/"){restURLtemp=restURLtemp.substring(0,restURLtemp.length-1)}setServiceURI(restURLtemp,this)}else if(!this.serviceURI){setLoginResult(progress.data.Session.LOGIN_GENERAL_FAILURE,this);throw new Error("Session.login() is missing the serviceURI argument.")}if(args[1]){uname=args[1]}if(args[2]){pw=args[2]}if(args[3]){setLoginTarget(args[3],this)}if(args[4]){if(typeof args[4]==="boolean"){isAsync=args[4]}else{throw new Error("Session.login() was passed an async setting that is not a boolean.")}}}else{setLoginResult(progress.data.Session.LOGIN_GENERAL_FAILURE,this);throw new Error("Session.login() is missing the serviceURI argument.")}unameSave=uname;pwSave=pw;if(this.authenticationModel===progress.data.Session.AUTH_TYPE_ANON||this.authenticationModel===progress.data.Session.AUTH_TYPE_FORM){uname=null;pw=null}var xhr=new XMLHttpRequest;xhr.pdsession=this;try{uriForRequest=this.serviceURI+this.loginTarget;if(progress.data.Session._useTimeStamp){uriForRequest=progress.data.Session._addTimeStampToURL(uriForRequest)}this._setXHRCredentials(xhr,"GET",uriForRequest,uname,pw,isAsync);progress.data.Session._setNoCacheHeaders(xhr);setRequestHeaderFromContextProps(this,xhr);if(this.authenticationModel===progress.data.Session.AUTH_TYPE_FORM){_addWithCredentialsAndAccept(xhr,"application/json,text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")}xhr._isAsync=isAsync;if(isAsync){xhr.onreadystatechange=this._onReadyStateChangeGeneric;if(this.authenticationModel===progress.data.Session.AUTH_TYPE_FORM){xhr.onResponseFn=this._afterFormPretestLogin}else{xhr.onResponseFn=this._processLoginResult;xhr.onResponseProcessedFn=this._loginComplete}if(this.authenticationModel===progress.data.Session.AUTH_TYPE_BASIC&&isUserAgentiOS&&iOSBasicAuthTimeout>0){xhr._requestTimeout=setTimeout(function(){clearTimeout(xhr._requestTimeout);xhr._iosTimeOutExpired=true;xhr.abort()},iOSBasicAuthTimeout)}xhr._jsdosession=jsdosession;xhr._deferred=deferred}if(typeof this.onOpenRequest==="function"){var isFormPreTest=false;if(this.authenticationModel===progress.data.Session.AUTH_TYPE_FORM){isFormPreTest=true}setLastSessionXHR(xhr,this);var params={xhr:xhr,verb:"GET",uri:this.serviceURI+this.loginTarget,async:false,formPreTest:isFormPreTest,session:this};this.onOpenRequest(params);xhr=params.xhr}setLastSessionXHR(xhr,this);xhr.send(null)}catch(e){clearTimeout(xhr._requestTimeout);setLoginHttpStatus(xhr.status,this);setLoginResult(progress.data.Session.LOGIN_GENERAL_FAILURE,this);unameSave=null;pwSave=null;throw e}if(isAsync){return progress.data.Session.ASYNC_PENDING}else{setLoginHttpStatus(xhr.status,this);if(this.authenticationModel===progress.data.Session.AUTH_TYPE_FORM){return this._afterFormPretestLogin(xhr)}else{return this._processLoginResult(xhr)}}};this._afterFormPretestLogin=function(xhr){var pdsession=xhr.pdsession;setLoginHttpStatus(xhr.status,xhr.pdsession);var formLoginParams={xhr:xhr,pw:pwSave,uname:unameSave,theSession:pdsession};try{return doFormLogin(formLoginParams)}catch(e){pwSave=null;unameSave=null;throw e}};function doFormLogin(args){var xhr=args.xhr;var theSession=args.theSession;var oldXHR;var contentType=null;var needAuth=false;var params={session:theSession,xhr:xhr,statusFromjson:null};contentType=xhr.getResponseHeader("Content-Type");if(contentType&&contentType.indexOf("application/json")>=0){handleJSONLoginResponse(params);if(!params.statusFromjson||params.statusFromjson>=400&¶ms.statusFromjson<500){needAuth=true}else{setLoginHttpStatus(params.statusFromjson,theSession)}}else{if(theSession.loginHttpStatus===200){if(_gotLoginForm(xhr)){needAuth=true}}}if(needAuth){oldXHR=xhr;xhr=new XMLHttpRequest;args.xhr=xhr;params.xhr=xhr;xhr.pdsession=oldXHR.pdsession;xhr._isAsync=oldXHR._isAsync;xhr._deferred=oldXHR._deferred;xhr._jsdosession=oldXHR._jsdosession;xhr.open("POST",theSession.serviceURI+"/static/auth/j_spring_security_check",xhr._isAsync);xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");xhr.setRequestHeader("Cache-Control","max-age=0");setRequestHeaderFromContextProps(theSession,xhr);_addWithCredentialsAndAccept(xhr,"application/json");try{if(typeof theSession.onOpenRequest==="function"){var cbparams={xhr:xhr,verb:"POST",uri:theSession.serviceURI+"/static/auth/j_spring_security_check",async:xhr._isAsync,formPreTest:false,session:theSession};theSession.onOpenRequest(cbparams);xhr=cbparams.xhr}if(xhr._isAsync){xhr.onreadystatechange=theSession._onReadyStateChangeGeneric;xhr.onResponseFn=theSession._afterFormLogin;xhr.onResponseProcessedFn=theSession._loginComplete}xhr.send("j_username="+encodeURIComponent(args.uname)+"&j_password="+encodeURIComponent(args.pw)+"&submit=Submit")}catch(e){setLoginResult(progress.data.Session.LOGIN_GENERAL_FAILURE,theSession);setLoginHttpStatus(xhr.status,theSession);unameSave=null;pwSave=null;throw e}}if(xhr._isAsync&&!needAuth){xhr.onResponseProcessedFn=theSession._loginComplete;return theSession._afterFormLogin(xhr)}if(!xhr._isAsync){return theSession._afterFormLogin(xhr)}}this._afterFormLogin=function(xhr){var theSession=xhr.pdsession;var params={session:theSession,xhr:xhr,statusFromjson:null};var contentType=xhr.getResponseHeader("Content-Type");if(contentType&&contentType.indexOf("application/json")>=0){handleJSONLoginResponse(params);if(!params.statusFromjson){throw new Error("Internal OpenEdge Mobile client error handling login response. HTTP status: "+xhr.status+".")}setLoginHttpStatus(params.statusFromjson,theSession)}else{if(xhr.status===200){if(_gotLoginFailure(xhr)||_gotLoginForm(xhr)){setLoginHttpStatus(401,theSession)}else{setLoginHttpStatus(xhr.status,theSession)}}}return theSession._processLoginResult(xhr)};this._processLoginResult=function(xhr){var pdsession=xhr.pdsession;setLoginHttpStatus(xhr.status,xhr.pdsession);if(pdsession.loginHttpStatus===200){setLoginResult(progress.data.Session.LOGIN_SUCCESS,pdsession);setRestApplicationIsOnline(true);setUserName(unameSave,pdsession);_password=pwSave;pdsession._saveClientContextId(xhr);storeAllSessionInfo();var pingTestArgs={pingURI:null,async:true,onCompleteFn:null,fireEventIfOfflineChange:true,onReadyStateFn:pdsession._pingtestOnReadyStateChange};pingTestArgs.pingURI=pdsession._makePingURI();pdsession._sendPing(pingTestArgs)}else{if(pdsession.loginHttpStatus===401){setLoginResult(progress.data.Session.LOGIN_AUTHENTICATION_FAILURE,pdsession)}else{setLoginResult(progress.data.Session.LOGIN_GENERAL_FAILURE,pdsession)}}setLastSessionXHR(xhr,pdsession);updateContextPropsFromResponse(pdsession,xhr);unameSave=null;pwSave=null;if(xhr._iosTimeOutExpired){throw new Error(progress.data._getMsgText("jsdoMSG047","login"))}return pdsession.loginResult};this._loginComplete=function(pdsession,result,errObj,xhr){pdsession.trigger("afterLogin",pdsession,result,errObj,xhr)};this.logout=function(args){var isAsync=false,errorObject=null,xhr,deferred,params;if(this.authenticationModel===progress.data.Session.AUTH_TYPE_SSO){throw new Error(progress.data._getMsgText("jsdoMSG057","Session","logout()"))}if(this.loginResult!==progress.data.Session.LOGIN_SUCCESS&&this.authenticationModel){throw new Error("Attempted to call logout when there is no active session.")}if(typeof args==="object"){isAsync=args.async;if(isAsync&&typeof isAsync!=="boolean"){throw new Error(progress.data._getMsgText("jsdoMSG033","Session","logout","The async argument was invalid."))}deferred=args.deferred}xhr=new XMLHttpRequest;xhr.pdsession=this;try{xhr._jsdosession=jsdosession;xhr._deferred=deferred;if(this.authenticationModel===progress.data.Session.AUTH_TYPE_FORM||this.authenticationModel===progress.data.Session.AUTH_TYPE_BASIC||this.authenticationModel===progress.data.Session.AUTH_TYPE_BEARER){if(isAsync){xhr.onreadystatechange=this._onReadyStateChangeGeneric;xhr.onResponseFn=this._processLogoutResult;xhr.onResponseProcessedFn=this._logoutComplete}xhr.open("GET",this.serviceURI+"/static/auth/j_spring_security_logout",isAsync);try{xhr.withCredentials=true}catch(e){}xhr.setRequestHeader("Accept","application/json");setRequestHeaderFromContextProps(this,xhr);if(typeof this.onOpenRequest==="function"){setLastSessionXHR(xhr,this);params={xhr:xhr,verb:"GET",uri:this.serviceURI+"/static/auth/j_spring_security_logout",async:false,formPreTest:false,session:this};this.onOpenRequest(params);xhr=params.xhr}setLastSessionXHR(xhr,this);xhr.send()}else{xhr._anonymousLogoutOK=true}}catch(e){this._reinitializeAfterLogout(this,false);throw e}if(!isAsync){try{this._processLogoutResult(xhr)}catch(e){throw e}}if(isAsync&&this.authenticationModel===progress.data.Session.AUTH_TYPE_ANON){try{this._processLogoutResult(xhr)}catch(e){errorObject=e}this._logoutComplete(this,null,errorObject,xhr)}};this.invalidate=function(){isInvalidated=true;cleanServicesManager()};this._logoutComplete=function(pdsession,result,errorObject,xhr){pdsession.trigger("afterLogout",pdsession,errorObject,xhr)};this._processLogoutResult=function(xhr){var logoutSucceeded;var pdsession=xhr.pdsession;var basicStatusOK=false;if(xhr._anonymousLogoutOK){logoutSucceeded=true}else if(xhr.status!==200){if(pdsession.authenticationModel===progress.data.Session.AUTH_TYPE_BASIC||pdsession.authenticationModel===progress.data.Session.AUTH_TYPE_BEARER){if(xhr.status===404){logoutSucceeded=true}else{logoutSucceeded=false;throw new Error("Error logging out, HTTP status = "+xhr.status)}}else{logoutSucceeded=false;throw new Error("Error logging out, HTTP status = "+xhr.status)}}else{logoutSucceeded=true}updateContextPropsFromResponse(pdsession,xhr);pdsession._reinitializeAfterLogout(pdsession,logoutSucceeded)};this._reinitializeAfterLogout=function(pdsession,success){setLoginResult(null,pdsession);setLoginHttpStatus(null,pdsession);setClientContextID(null,pdsession);setUserName(null,pdsession);setAuthProvider(null);_password=null;if(success){setRestApplicationIsOnline(false);setOepingAvailable(false);setPartialPingURI(defaultPartialPingURI);setLastSessionXHR(null,pdsession);clearTimeout(_timeoutID)}};this.addCatalog=function(arg1,arg2,arg3,arg4){var catalogURI,catalogUserName,catalogPassword,isAsync=false,xhr,deferred,iOSBasicAuthTimeout,catalogIndex,authProvider,that=this;function addCatalogAfterOpen(){progress.data.Session._setNoCacheHeaders(xhr);setRequestHeaderFromContextProps(that,xhr);if(isAsync){xhr.onreadystatechange=that._onReadyStateChangeGeneric;xhr.onResponseFn=that._processAddCatalogResult;xhr.onResponseProcessedFn=that._addCatalogComplete;if(that.authenticationModel===progress.data.Session.AUTH_TYPE_BASIC&&isUserAgentiOS&&iOSBasicAuthTimeout){xhr._requestTimeout=setTimeout(function(){clearTimeout(xhr._requestTimeout);xhr._iosTimeOutExpired=true;xhr.abort()},iOSBasicAuthTimeout)}xhr._jsdosession=jsdosession;xhr._deferred=deferred;xhr._catalogIndex=catalogIndex}try{if(typeof that.onOpenRequest==="function"){setLastSessionXHR(xhr,that);var params={xhr:xhr,verb:"GET",uri:catalogURI,async:false,formPreTest:false,session:that};that.onOpenRequest(params);xhr=params.xhr}setLastSessionXHR(xhr,that);xhr.send(null)}catch(e){throw new Error("Error retrieving catalog '"+catalogURI+"'.\n"+e.message)}if(isAsync){return progress.data.Session.ASYNC_PENDING}else{return that._processAddCatalogResult(xhr)}}if(this._isInvalidated){throw new Error(progress.data._getMsgText("jsdoMSG510","JSDOSession"))}customCredentials=true;if(arguments.length>0){if(typeof arg1==="object"){if(!arguments[0].offlineAddCatalog){if(this.loginResult!==progress.data.Session.LOGIN_SUCCESS&&!this._authProvider&&this.authenticationModel){throw new Error("Attempted to call addCatalog when there is no active session.")}}catalogURI=arg1.catalogURI;if(!catalogURI||typeof catalogURI!=="string"){throw new Error(progress.data._getMsgText("jsdoMSG033","Session","addCatalog","The catalogURI argument was missing or invalid."))}catalogUserName=arg1.userName;if(catalogUserName&&typeof catalogUserName!=="string"){throw new Error(progress.data._getMsgText("jsdoMSG033","Session","addCatalog","The catalogUserName argument was invalid."))}catalogPassword=arg1.password;if(catalogPassword&&typeof catalogPassword!=="string"){throw new Error(progress.data._getMsgText("jsdoMSG033","Session","addCatalog","The catalogPassword argument was invalid."))}isAsync=arg1.async;if(isAsync&&typeof isAsync!=="boolean"){throw new Error(progress.data._getMsgText("jsdoMSG033","Session","addCatalog","The async argument was invalid."))}iOSBasicAuthTimeout=arg1.iOSBasicAuthTimeout;if(typeof iOSBasicAuthTimeout==="undefined"){iOSBasicAuthTimeout=defaultiOSBasicAuthTimeout}else if(iOSBasicAuthTimeout&&typeof iOSBasicAuthTimeout!=="number"){throw new Error(progress.data._getMsgText("jsdoMSG033","Session","addCatalog","The iOSBasicAuthTimeout argument was invalid."))}authProvider=arg1.authProvider;deferred=arg1.deferred;catalogIndex=arg1.catalogIndex}else{catalogURI=arg1;if(typeof catalogURI!=="string"){throw new Error("First argument to Session.addCatalog must be the URL of the catalog.")}catalogUserName=arg2;if(catalogUserName&&typeof catalogUserName!=="string"){throw new Error("Second argument to Session.addCatalog must be a user name string.")}catalogPassword=arg3;if(catalogPassword&&typeof catalogPassword!=="string"){throw new Error("Third argument to Session.addCatalog must be a password string.")}}}else{throw new Error("Session.addCatalog is missing its first argument, the URL of the catalog.")}if(!authProvider){authProvider=this._authProvider;customCredentials=false}if(!catalogUserName){catalogUserName=this.userName}if(!catalogPassword){catalogPassword=_password}xhr=new XMLHttpRequest;xhr.pdsession=this;xhr._catalogURI=catalogURI;if(progress.data.ServicesManager.getSession(catalogURI)!==undefined){if(isAsync){xhr._jsdosession=jsdosession;xhr._deferred=deferred;xhr._catalogIndex=catalogIndex;setTimeout(this._addCatalogComplete,10,this,progress.data.Session.CATALOG_ALREADY_LOADED,null,xhr);return progress.data.Session.ASYNC_PENDING}return progress.data.Session.CATALOG_ALREADY_LOADED}if(authProvider){authProvider._openRequestAndAuthorize(xhr,"GET",catalogURI,isAsync,addCatalogAfterOpen);return progress.data.Session.ASYNC_PENDING}else{this._setXHRCredentials(xhr,"GET",catalogURI,catalogUserName,catalogPassword,isAsync);return addCatalogAfterOpen()}};this._processAddCatalogResult=function(xhr){var _catalogHttpStatus=xhr.status;var theSession=xhr.pdsession;var servicedata;var catalogURI=xhr._catalogURI,serviceURL,theJSDOSession=jsdosession;if(!customCredentials){toggleOnlineState(xhr)}if((_catalogHttpStatus===200||_catalogHttpStatus===0)&&xhr.responseText){servicedata=theSession._parseCatalog(xhr);try{progress.data.ServicesManager.addCatalog(servicedata,theSession)}catch(e){if(progress.data.ServicesManager.getSession(catalogURI)!==undefined){return progress.data.Session.CATALOG_ALREADY_LOADED}throw new Error("Error processing catalog '"+catalogURI+"'. \n"+e.message)}servicedata.forEach(function(service){serviceURL=theSession._prependAppURL(service.address);pushService(new progress.data.MobileServiceObject({name:service.name,uri:serviceURL}),theSession);if(service.settings&&service.settings.useXClientProps&&!theSession.xClientProps){console.warn("Catalog warning: Service settings property 'useXClientProps' "+"is true but 'xClientProps' property has not been set.")}});pushCatalogURIs(catalogURI,theSession);progress.data.ServicesManager.addSession(catalogURI,theSession);if(theJSDOSession){progress.data.ServicesManager.addJSDOSession(catalogURI,theJSDOSession)}}else if(_catalogHttpStatus===401){return progress.data.AuthenticationProvider._getAuthFailureReason(xhr)}else if(xhr._iosTimeOutExpired){throw new Error(progress.data._getMsgText("jsdoMSG047","addCatalog"))}else{throw new Error("Error retrieving catalog '"+catalogURI+"'. Http status: "+_catalogHttpStatus+".")}return progress.data.Session.SUCCESS};this._addCatalogComplete=function(pdsession,result,errObj,xhr){pdsession.trigger("afterAddCatalog",pdsession,result,errObj,xhr)};this.ping=function(args){var pingResult=false,pingArgs={pingURI:null,async:true,onCompleteFn:null,fireEventIfOfflineChange:true,onReadyStateFn:this._onReadyStateChangePing,offlineReason:null};if(this._isInvalidated){throw new Error(progress.data._getMsgText("jsdoMSG510","Session"))}if(!this._authProvider&&this.loginResult!==progress.data.Session.LOGIN_SUCCESS){throw new Error("Attempted to call ping when not logged in.")}if(args){if(args.async!==undefined){pingArgs.async=args.async}if(args.doNotFireEvent!==undefined){pingArgs.fireEventIfOfflineChange=!args.doNotFireEvent}if(args.onCompleteFn&&typeof args.onCompleteFn==="function"){pingArgs.onCompleteFn=args.onCompleteFn}pingArgs.deferred=args.deferred;pingArgs.jsdosession=args.jsdosession}pingArgs.pingURI=that._makePingURI();that._sendPing(pingArgs);if(!pingArgs.async){if(pingArgs.xhr){pingResult=that._processPingResult(pingArgs);if(args.offlineReason!==undefined){args.offlineReason=pingArgs.offlineReason}}else{pingResult=false}if(args.xhr!==undefined){args.xhr=pingArgs.xhr}}return pingResult};this._isOnlineStateChange=function(isOnline){var stateChanged=false;if(isOnline&&!this.connected){stateChanged=true}else if(!isOnline&&this.connected){stateChanged=true}return stateChanged};this._checkServiceResponse=function(xhr,success,request){var offlineReason=null,wasOnline=this.connected;updateContextPropsFromResponse(this,xhr);if(!this._events){return}var offlineObservers=this._events.offline||[];var onlineObservers=this._events.online||[];if(offlineObservers.length===0&&onlineObservers.length===0){return}if(success){setRestApplicationIsOnline(true);setDeviceIsOnline(true)}else{if(deviceIsOnline){var localPingArgs={doNotFireEvent:true,offlineReason:null,async:false};if(!that.ping(localPingArgs)){offlineReason=localPingArgs.offlineReason;setRestApplicationIsOnline(false)}else{setRestApplicationIsOnline(true)}}}if(wasOnline&&!this.connected){this.trigger("offline",this,offlineReason,request)}else if(!wasOnline&&this.connected){this.trigger("online",this,request)}};this._processPingResult=function(args){var xhr=args.xhr,pingResponseJSON,appServerStatus=null,wasOnline=this.connected,connectedBeforeCallback,assumeOepingFormat;if(args.hasOwnProperty("usingOepingFormat")){assumeOepingFormat=args.usingOepingFormat}else{assumeOepingFormat=oepingAvailable}if(xhr.status>=200&&xhr.status<300){updateContextPropsFromResponse(this,xhr);if(assumeOepingFormat){try{pingResponseJSON=JSON.parse(xhr.responseText);appServerStatus=pingResponseJSON.AppServerStatus}catch(e){console.error("Unable to parse ping response.")}}toggleOnlineState(xhr)}else{if(deviceIsOnline){if(xhr.status===0){args.offlineReason=progress.data.Session.SERVER_OFFLINE;setRestApplicationIsOnline(false)}else if(xhr.status===404||xhr.status===410){args.offlineReason=progress.data.Session.WEB_APPLICATION_OFFLINE;setRestApplicationIsOnline(false)}else{setRestApplicationIsOnline(true)}}else{args.offlineReason=progress.data.Session.DEVICE_OFFLINE}}if(appServerStatus){if(appServerStatus.PingStatus==="false"){args.offlineReason=progress.data.Session.APPSERVER_OFFLINE;setRestApplicationIsOnline(false)}else{setRestApplicationIsOnline(true)}}connectedBeforeCallback=this.connected;if(typeof xhr.onCompleteFn==="function"){xhr.onCompleteFn({pingResult:this.connected,xhr:xhr,offlineReason:args.offlineReason})}if(args.fireEventIfOfflineChange){if(wasOnline&&!connectedBeforeCallback){that.trigger("offline",that,args.offlineReason,null)}else if(!wasOnline&&connectedBeforeCallback){that.trigger("online",that,null)}}return this.connected};this._onReadyStateChangePing=function(){var xhr=this;var args;try{if(xhr.readyState===4){args={xhr:xhr,fireEventIfOfflineChange:true,offlineReason:null};that._processPingResult(args);if(_pingInterval>0){_timeoutID=setTimeout(that._autoping,_pingInterval)}}}catch(e){}};this._pingtestOnReadyStateChange=function(){var xhr=this;try{if(xhr.readyState===4){var foundOeping=false;if(xhr.status>=200&&xhr.status<300){foundOeping=true}else{setPartialPingURI(that.loginTarget);console.warn("Default ping target not available, will use loginTarget instead.")}setOepingAvailable(foundOeping);if(_pingInterval>0){_timeoutID=setTimeout(that._autoping,_pingInterval)}}}catch(e){}};var resolvePingURI=()=>{var xhr=new XMLHttpRequest,deferred=new progress.util.Deferred;xhr.onreadystatechange=(()=>{if(xhr.readyState===4){if(xhr.status===404){setPartialPingURI(classicPartialPingURI);deferred.reject(false)}else{deferred.resolve(true)}hasResolvedPingURI=true}});if(hasResolvedPingURI||this.loginResult!==progress.data.Session.LOGIN_SUCCESS&&!this.authProvider){deferred.resolve(true)}else{this._openRequest(xhr,"GET",partialPingURI,true,()=>xhr.send())}return deferred.promise()};this._sendPing=function(args){var xhr=new XMLHttpRequest,that=this;args.xhr=xhr;function sendPingAfterOpen(){if(args.async){xhr.onreadystatechange=args.onReadyStateFn;xhr.onCompleteFn=args.onCompleteFn;xhr._jsdosession=jsdosession;xhr._deferred=args.deferred}progress.data.Session._setNoCacheHeaders(xhr);setRequestHeaderFromContextProps(that,xhr);if(that.authenticationModel===progress.data.Session.AUTH_TYPE_FORM){_addWithCredentialsAndAccept(xhr,"application/json,text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")}xhr.send(null)}resolvePingURI().then(()=>{},()=>{args.pingURI=this._makePingURI()}).then(()=>{try{if(this._authProvider){this._authProvider._openRequestAndAuthorize(xhr,"GET",args.pingURI,args.async,sendPingAfterOpen)}else{this._setXHRCredentials(xhr,"GET",args.pingURI,this.userName,_password,args.async);if(xhr.readyState===1){sendPingAfterOpen()}}}catch(e){args.error=e}})};this._makePingURI=function(){var pingURI=this.serviceURI+partialPingURI;if(progress.data.Session._useTimeStamp){pingURI=progress.data.Session._addTimeStampToURL(pingURI)}return pingURI};this._autoping=function(){that.ping({async:true})};this._setXHRCredentials=function(xhr,verb,uri,userName,password,async){if(userName&&this.authenticationModel===progress.data.Session.AUTH_TYPE_BASIC){if(canPassCredentialsToOpen()){xhr.open(verb,uri,async,userName,password)}else{xhr.open(verb,uri,async)}var auth=_make_basic_auth(userName,password);xhr.setRequestHeader("Authorization",auth)}else{xhr.open(verb,uri,async)}};this._addCCIDtoURL=function(url){var urlPart1,urlPart2,jsessionidStr,index;if(this.clientContextId&&this.clientContextId!=="0"){if(url.substring(0,this.serviceURI.length)===this.serviceURI){jsessionidStr=";"+"JSESSIONID="+this.clientContextId;index=url.indexOf("?");if(index===-1){url+=jsessionidStr}else{urlPart1=url.substring(0,index);urlPart2=url.substring(index);url=urlPart1+jsessionidStr+urlPart2}}}return url};this._saveClientContextId=function(xhr){setClientContextIDfromXHR(xhr,this)};this._parseCatalog=function(xhr){var jsonObject;var catalogdata;try{jsonObject=JSON.parse(xhr.responseText);catalogdata=jsonObject.services}catch(e){console.error("Unable to parse response. Make sure catalog has correct format.");catalogdata=null}return catalogdata};this._prependAppURL=function(oldURL){if(!oldURL){return this.serviceURI}var newURL=oldURL;var pat=/^https?:\/\//i;if(!pat.test(newURL)){if(newURL.indexOf("/")!==0){newURL="/"+newURL}newURL=this.serviceURI+newURL}return newURL};function _addWithCredentialsAndAccept(xhr,acceptString){try{xhr.withCredentials=true;xhr.setRequestHeader("Accept",acceptString)}catch(e){}}function _make_basic_auth(user,pw){var tok=user+":"+pw;var hash=btoa(tok);return"Basic "+hash}var loginFormIDString="j_spring_security_check";function _gotLoginForm(xhr){return _findStringInResponseHTML(xhr,loginFormIDString)}var loginFailureIdentificationString="login failed";function _gotLoginFailure(xhr){return _findStringInResponseHTML(xhr,loginFailureIdentificationString)}function _findStringInResponseHTML(xhr,searchString){if(!xhr.responseText){return false}var contentType=xhr.getResponseHeader("Content-Type");if(contentType&&contentType.indexOf("text/html")>=0&&xhr.responseText.indexOf(searchString)>=0){return true}return false}function handleJSONLoginResponse(params){var jsonObject;params.statusFromjson=null;try{jsonObject=JSON.parse(params.xhr.responseText);if(jsonObject.status_code!==undefined&&jsonObject.status_txt!==undefined){params.statusFromjson=jsonObject.status_code}}catch(e){setLoginResult(progress.data.Session.LOGIN_GENERAL_FAILURE,params.session);setLoginHttpStatus(params.xhr.status,params.session);throw new Error("Unable to parse login response from server.")}}function setRequestHeaderFromContextProps(session,xhr){if(session.xClientProps){xhr.setRequestHeader("X-CLIENT-PROPS",session.xClientProps)}else if(session._contextProperties.contextHeader!==undefined){xhr.setRequestHeader("X-CLIENT-PROPS",session._contextProperties.contextHeader)}}function toggleOnlineState(xhr){var pdsession=that;setLoginHttpStatus(xhr.status,pdsession);if(pdsession.loginHttpStatus>=200&&pdsession.loginHttpStatus<400){setLoginResult(progress.data.Session.LOGIN_SUCCESS,pdsession);setRestApplicationIsOnline(true);pdsession._saveClientContextId(xhr);storeAllSessionInfo()}else{if(pdsession.loginHttpStatus===0||pdsession.loginHttpStatus===400||pdsession.loginHttpStatus===410){setRestApplicationIsOnline(false);setLoginResult(progress.data.AuthenticationProvider._getAuthFailureReason(xhr),pdsession)}else{setRestApplicationIsOnline(true);setLoginResult(progress.data.Session.LOGIN_GENERAL_FAILURE,pdsession)}}setLastSessionXHR(xhr,pdsession);updateContextPropsFromResponse(pdsession,xhr);return pdsession.loginResult}function updateContextPropsFromResponse(session,xhr){var contextString,context;if(xhr){contextString=getResponseHeaderNoError(xhr,"X-CLIENT-PROPS");if(contextString){try{context=JSON.parse(contextString)}catch(e){}if(typeof context==="object"){session._contextProperties.setContext(context)}else{throw new Error(progress.data._getMsgText("jsdoMSG123","Session","X-CLIENT-PROPS"))}}else if(contextString===""){session._contextProperties.setContext({})}}}function cleanServicesManager(){progress.data.ServicesManager.cleanSession(that)}if(typeof options==="object"){jsdosession=options.jsdosession;newURI=options.serviceURI;setAuthProvider(options.authProvider);if(options.authProvider&&options.authProvider.hasClientCredentials()){_loginResult=progress.data.Session.LOGIN_SUCCESS}if(newURI&&newURI[newURI.length-1]==="/"){newURI=newURI.substring(0,newURI.length-1)}_storageKey=options._storageKey;if(_storageKey){if(retrieveSessionInfo(_storageKey)){storedAuthModel=retrieveSessionInfo("authenticationModel");storedURI=retrieveSessionInfo("serviceURI");if(storedAuthModel!==options.authenticationModel||storedURI!==newURI){clearAllSessionInfo()}else{setSessionInfoFromStorage(_storageKey);stateWasReadFromStorage=true}}if(options.authenticationModel===progress.data.Session.AUTH_TYPE_BASIC){_storageKey=undefined}}if(!stateWasReadFromStorage){if(newURI){setServiceURI(newURI,this)}if(options.authenticationModel){this.authenticationModel=options.authenticationModel}}}};progress.data.Session._useTimeStamp=true;var SEQ_MAX_VALUE=999999999999999;var _tsseq=SEQ_MAX_VALUE;var _tsprefix1=0;var _tsprefix2=0;progress.data.Session._getNextTimeStamp=function(){var seq;_tsseq+=1;seq=_tsseq;if(seq>=SEQ_MAX_VALUE){_tsseq=1;seq=1;var t=Math.floor((Date.now?Date.now():(new Date).getTime())/1e4);if(_tsprefix1===t){_tsprefix2+=1;if(_tsprefix2>=SEQ_MAX_VALUE){_tsprefix2=1}}else{_tsprefix1=t;Math.random();_tsprefix2=Math.round(Math.random()*1e10)}}return _tsprefix1+"-"+_tsprefix2+"-"+seq};progress.data.Session._addTimeStampToURL=function(url){var timeStamp="_ts="+progress.data.Session._getNextTimeStamp();url+=(url.indexOf("?")===-1?"?":"&")+timeStamp;return url};progress.data.Session._setNoCacheHeaders=function(xhr){xhr.setRequestHeader("Cache-Control","no-cache");xhr.setRequestHeader("Pragma","no-cache")};if(typeof Object.defineProperty==="function"){Object.defineProperty(progress.data.Session,"LOGIN_AUTHENTICATION_REQUIRED",{value:0,enumerable:true});Object.defineProperty(progress.data.Session,"LOGIN_SUCCESS",{value:1,enumerable:true});Object.defineProperty(progress.data.Session,"LOGIN_AUTHENTICATION_FAILURE",{value:2,enumerable:true});Object.defineProperty(progress.data.Session,"LOGIN_GENERAL_FAILURE",{value:3,enumerable:true});Object.defineProperty(progress.data.Session,"CATALOG_ALREADY_LOADED",{value:4,enumerable:true});Object.defineProperty(progress.data.Session,"ASYNC_PENDING",{value:5,enumerable:true});Object.defineProperty(progress.data.Session,"EXPIRED_TOKEN",{value:6,enumerable:true});Object.defineProperty(progress.data.Session,"SUCCESS",{value:1,enumerable:true});Object.defineProperty(progress.data.Session,"AUTHENTICATION_FAILURE",{value:2,enumerable:true});Object.defineProperty(progress.data.Session,"GENERAL_FAILURE",{value:3,enumerable:true});Object.defineProperty(progress.data.Session,"AUTH_TYPE_ANON",{value:"anonymous",enumerable:true});Object.defineProperty(progress.data.Session,"AUTH_TYPE_BASIC",{value:"basic",enumerable:true});Object.defineProperty(progress.data.Session,"AUTH_TYPE_FORM",{value:"form",enumerable:true});Object.defineProperty(progress.data.Session,"AUTH_TYPE_SSO",{value:"sso",enumerable:true});Object.defineProperty(progress.data.Session,"AUTH_TYPE_FORM_SSO",{value:"form_sso",enumerable:true});Object.defineProperty(progress.data.Session,"AUTH_TYPE_BEARER",{value:"bearer",enumerable:true});Object.defineProperty(progress.data.Session,"DEVICE_OFFLINE",{value:"Device is offline",enumerable:true});Object.defineProperty(progress.data.Session,"SERVER_OFFLINE",{value:"Cannot contact server",enumerable:true});Object.defineProperty(progress.data.Session,"WEB_APPLICATION_OFFLINE",{value:"Mobile Web Application is not available",enumerable:true});Object.defineProperty(progress.data.Session,"SERVICE_OFFLINE",{value:"REST web Service is not available",enumerable:true});Object.defineProperty(progress.data.Session,"APPSERVER_OFFLINE",{value:"AppServer is not available",enumerable:true})}else{progress.data.Session.LOGIN_SUCCESS=1;progress.data.Session.LOGIN_AUTHENTICATION_FAILURE=2;progress.data.Session.LOGIN_GENERAL_FAILURE=3;progress.data.Session.CATALOG_ALREADY_LOADED=4;progress.data.Session.SUCCESS=1;progress.data.Session.AUTHENTICATION_FAILURE=2;progress.data.Session.GENERAL_FAILURE=3;progress.data.Session.AUTH_TYPE_ANON="anonymous";progress.data.Session.AUTH_TYPE_BASIC="basic";progress.data.Session.AUTH_TYPE_FORM="form";progress.data.Session.AUTH_TYPE_SSO="sso";progress.data.Session.AUTH_TYPE_BEARER="bearer"}progress.data.Session.prototype=new progress.util.Observable;progress.data.Session.prototype.constructor=progress.data.Session;function validateSessionSubscribe(args,evt,listenerData){listenerData.operation=undefined;var found=false;this._eventNames.forEach(function(eventName){if(evt===eventName.toLowerCase()){found=true}});if(!found){throw new Error(progress.data._getMsgText("jsdoMSG042",evt))}if(args.length<2){throw new Error(progress.data._getMsgText("jsdoMSG038",2))}if(typeof args[0]!=="string"){throw new Error(progress.data._getMsgText("jsdoMSG039"))}if(typeof args[1]!=="function"){throw new Error(progress.data._getMsgText("jsdoMSG040"))}listenerData.fn=args[1];if(args.length>2){if(typeof args[2]!=="object"){throw new Error(progress.data._getMsgText("jsdoMSG041",evt))}else{listenerData.scope=args[2]}}}progress.data.Session.prototype._eventNames=["offline","online","afterLogin","afterAddCatalog","afterLogout","afterDisconnect"];progress.data.Session.prototype.validateSubscribe=validateSessionSubscribe;progress.data.Session.prototype.toString=function(radix){return"progress.data.Session"};progress.data.JSDOSession=function JSDOSession(options){var _pdsession,_serviceURI,that=this,_name;Object.defineProperty(this,"authenticationModel",{get:function(){return _pdsession?_pdsession.authenticationModel:undefined},enumerable:true});Object.defineProperty(this,"authProvider",{get:function(){return _pdsession?_pdsession._authProvider:null},enumerable:true});Object.defineProperty(this,"catalogURIs",{get:function(){return _pdsession?_pdsession.catalogURIs:undefined},enumerable:true});Object.defineProperty(this,"clientContextId",{get:function(){return _pdsession?_pdsession.clientContextId:undefined},enumerable:true});Object.defineProperty(this,"connected",{get:function(){return _pdsession?_pdsession.connected:undefined},enumerable:true});Object.defineProperty(this,"JSDOs",{get:function(){return _pdsession?_pdsession.JSDOs:undefined},enumerable:true});Object.defineProperty(this,"loginResult",{get:function(){return _pdsession?_pdsession.loginResult:undefined},enumerable:true});Object.defineProperty(this,"loginHttpStatus",{get:function(){return _pdsession?_pdsession.loginHttpStatus:undefined},enumerable:true});Object.defineProperty(this,"onOpenRequest",{get:function(){return _pdsession?_pdsession.onOpenRequest:undefined},set:function(newval){if(_pdsession){_pdsession.onOpenRequest=newval}},enumerable:true});Object.defineProperty(this,"pingInterval",{get:function(){return _pdsession?_pdsession.pingInterval:undefined},set:function(newval){if(_pdsession){_pdsession.pingInterval=newval}},enumerable:true});Object.defineProperty(this,"services",{get:function(){return _pdsession?_pdsession.services:undefined},enumerable:true});Object.defineProperty(this,"serviceURI",{get:function(){if(_pdsession&&_pdsession.serviceURI){return _pdsession.serviceURI}else{return _serviceURI}},enumerable:true});Object.defineProperty(this,"userName",{get:function(){return _pdsession?_pdsession.userName:undefined},enumerable:true});Object.defineProperty(this,"name",{get:function(){return _name},enumerable:true});Object.defineProperty(this,"_isInvalidated",{get:function(){return _pdsession._isInvalidated},enumerable:false});function settlePromise(promise,fulfill,result,info){if(fulfill){promise.resolve(that,result,info)}else{promise.reject(that,result,info)}}function genericSessionEventHandler(pdsession,result,errorObject,xhr,deferred){var myDeferred;if(xhr){myDeferred=xhr._deferred}else{myDeferred=deferred}settlePromise(myDeferred,result===progress.data.Session.SUCCESS?true:false,result,{errorObject:errorObject,xhr:xhr})}function onAfterAddCatalog(pdsession,result,errorObject,xhr){var deferred,fulfill=false,settleResult,info;if(result===progress.data.Session.EXPIRED_TOKEN){settleResult=progress.data.Session.EXPIRED_TOKEN}else if(result===progress.data.Session.LOGIN_AUTHENTICATION_FAILURE){settleResult=progress.data.Session.LOGIN_AUTHENTICATION_FAILURE}else{settleResult=progress.data.Session.GENERAL_FAILURE}if(xhr&&xhr._deferred){deferred=xhr._deferred;if(result!==progress.data.Session.SUCCESS&&result!==progress.data.Session.CATALOG_ALREADY_LOADED){result=result||progress.data.Session.GENERAL_FAILURE;deferred._overallCatalogResult=progress.data.Session.GENERAL_FAILURE}deferred._results[xhr._catalogIndex]={catalogURI:xhr._catalogURI,result:result,errorObject:errorObject,xhr:xhr};deferred._numCatalogsProcessed+=1;if(deferred._numCatalogsProcessed===deferred._numCatalogs){deferred._processedPromise=true;if(!deferred._overallCatalogResult){fulfill=true;settleResult=progress.data.Session.SUCCESS}if(settleResult===progress.data.Session.SUCCESS){if(xhr._deferred._results.length===1){info=xhr._deferred._results[0]}else{info={xhr:xhr,result:settleResult,details:xhr._deferred._results}}}else{if(xhr._deferred._results.length===1){info=xhr._deferred._results[0]}else{info={xhr:xhr,result:settleResult,errorObject:new Error(progress.data._getMsgText("jsdoMSG512")),details:xhr._deferred._results}}}settlePromise(xhr._deferred,fulfill,settleResult,info)}}}function onAfterLogout(pdsession,errorObject,xhr){var result=progress.data.Session.GENERAL_FAILURE,fulfill=false;if(xhr&&xhr._deferred){if(!errorObject&&!pdsession.loginResult){result=progress.data.Session.SUCCESS;fulfill=true}settlePromise(xhr._deferred,fulfill,result,{errorObject:errorObject,xhr:xhr})}}function onPingComplete(args){var xhr=args.xhr;if(xhr&&xhr._deferred){settlePromise(xhr._deferred,args.pingResult,args.pingResult,{offlineReason:args.offlineReason,xhr:xhr})}}this.login=function(username,password,options){var deferred=new progress.util.Deferred,iOSBasicAuthTimeout;function callIsAuthorized(){that.isAuthorized().then(function(object,result,info){object=progress.util.Deferred.getParamObject(object,result,info);deferred.resolve(that,object.result,object.info)},function(object,result,info){object=progress.util.Deferred.getParamObject(object,result,info);deferred.reject(that,object.result,object.info)})}try{if(this._isInvalidated){throw new Error(progress.data._getMsgText("jsdoMSG510","JSDOSession"))}if(this.authenticationModel===progress.data.Session.AUTH_TYPE_SSO){throw new Error(progress.data._getMsgText("jsdoMSG057","JSDOSession","login()"))}if(typeof options==="object"){iOSBasicAuthTimeout=options.iOSBasicAuthTimeout}if(!_pdsession._authProvider){_pdsession._authProvider=new progress.data.AuthenticationProvider({uri:this.serviceURI,authenticationModel:this.authenticationModel});_pdsession._authProvider.logout().then(function(){return _pdsession._authProvider.login(username,password)}).then(function(){callIsAuthorized()},function(object,result,info){object=progress.util.Deferred.getParamObject(object,result,info);deferred.reject(that,object.result,object.info)})}else{throw new Error(progress.data._getMsgText("jsdoMSG062","JSDOSession","login()"))}}catch(error){if(progress.util.Deferred.useJQueryPromises){throw error}else{deferred.reject(this,progress.data.Session.GENERAL_FAILURE,{errorObject:error})}}return deferred.promise()};this.disconnect=function(){var deferred=new progress.util.Deferred,errorObject;try{_pdsession.subscribe("afterDisconnect",genericSessionEventHandler,this);_pdsession._disconnect(deferred)}catch(e){errorObject=new Error(progress.data._getMsgText("jsdoMSG049","JSDOSession","disconnect",e.message))}if(errorObject){if(progress.util.Deferred.useJQueryPromises){throw errorObject}else{deferred.reject(this,progress.data.Session.GENERAL_FAILURE,{errorObject:errorObject})}}else{return deferred.promise()}};this.addCatalog=function(catalogURI,unameOrOpts,password,opts){var deferred=new progress.util.Deferred,catalogURIs,numCatalogs,catalogIndex,addResult,errorObject,iOSBasicAuthTimeout,username,options,authProvider;try{if(this._isInvalidated){throw new Error(progress.data._getMsgText("jsdoMSG510","JSDOSession"))}if(typeof catalogURI==="string"){catalogURIs=[catalogURI]}else if(catalogURI instanceof Array){catalogURIs=catalogURI}else{throw new Error(progress.data._getMsgText("jsdoMSG033","JSDOSession","addCatalog","The first argument must be a string or an array of strings specifying the URI of the catalog."))}if(unameOrOpts){if(typeof unameOrOpts==="string"){if(this.authenticationModel===progress.data.Session.AUTH_TYPE_SSO){throw new Error(progress.data._getMsgText("jsdoMSG058","Session"))}username=unameOrOpts;if(opts){options=opts;options.authProvider=undefined}}else if(typeof unameOrOpts==="object"){options=unameOrOpts}else{throw new Error(progress.data._getMsgText("jsdoMSG121","JSDOSession","2","object","addCatalog"))}}if(typeof options==="object"){iOSBasicAuthTimeout=options.iOSBasicAuthTimeout;if(options.authProvider){authProvider=options.authProvider}else if(this.authProvider){authProvider=this.authProvider}}if(!authProvider&&!this.authProvider&&!username){throw new Error(progress.data._getMsgText("jsdoMSG511"))}_pdsession.subscribe("afterAddCatalog",onAfterAddCatalog,this);numCatalogs=catalogURIs.length;deferred._numCatalogs=numCatalogs;deferred._numCatalogsProcessed=0;deferred._results=[];deferred._results.length=numCatalogs;for(catalogIndex=0;catalogIndex=200&&xhr.status<300){deferred.resolve(that,progress.data.Session.SUCCESS,info)}else{if(xhr.status===401){cbresult=progress.data.AuthenticationProvider._getAuthFailureReason(xhr)}else{cbresult=progress.data.Session.GENERAL_FAILURE}deferred.reject(that,cbresult,info)}}}catch(e){}};try{xhr.send()}catch(e){throw new Error("JSDOSession: Unable to validate authorization. "+e.message)}})}else{result=progress.data.Session.LOGIN_AUTHENTICATION_REQUIRED;deferred.reject(that,result,{xhr:xhr})}}catch(error){if(progress.util.Deferred.useJQueryPromises){throw error}else{deferred.reject(that,progress.data.Session.GENERAL_FAILURE,{errorObject:error})}}return deferred.promise()};this.setContext=function(context){_pdsession._contextProperties.setContext(context)};this.setContextProperty=function(propertyName,propertyValue){_pdsession._contextProperties.setContextProperty(propertyName,propertyValue)};this.getContext=function(){return _pdsession._contextProperties.getContext()};this.getContextProperty=function(propertyName){return _pdsession._contextProperties.getContextProperty(propertyName)};this._onlineHandler=function(session,request){that.trigger("online",that,request)};this._offlineHandler=function(session,offlineReason,request){that.trigger("offline",that,offlineReason,request)};if(arguments.length>0&&typeof arguments[0]==="object"){if(options.serviceURI&&typeof options.serviceURI==="string"){_serviceURI=options.serviceURI}else{throw new Error(progress.data._getMsgText("jsdoMSG033","JSDOSession","the constructor","The options parameter must include a 'serviceURI' property that is a string."))}if(options.authenticationModel){if(typeof options.authenticationModel!=="string"){throw new Error(progress.data._getMsgText("jsdoMSG033","JSDOSession","the constructor","The authenticationModel property of the options parameter must be a string."))}options.authenticationModel=options.authenticationModel.toLowerCase()}else{options.authenticationModel=progress.data.Session.AUTH_TYPE_ANON}if(options.authProvider){if(typeof options.authProvider!=="object"){throw new Error(progress.data._getMsgText("jsdoMSG502","JSDOSession","options","constructor","authProvider"))}if(options.authProvider.authenticationModel!==progress.data.Session.AUTH_TYPE_FORM_SSO&&options.authProvider.authenticationModel!==options.authenticationModel||options.authProvider.authenticationModel===progress.data.Session.AUTH_TYPE_FORM_SSO&&options.authenticationModel!==progress.data.Session.AUTH_TYPE_SSO){throw new Error(progress.data._getMsgText("jsdoMSG059","JSDOSession",options.authProvider.authenticationModel,options.authenticationModel))}if(typeof options.authProvider.hasClientCredentials==="function"){if(!options.authProvider.hasClientCredentials()){throw new Error(progress.data._getMsgText("jsdoMSG125","JSDOSession"))}}else{throw new Error(progress.data._getMsgText("jsdoMSG505","JSDOSession","AuthenticationProvider","hasClientCredentials"))}}else if(options.authenticationModel===progress.data.Session.AUTH_TYPE_SSO){throw new Error(progress.data._getMsgText("jsdoMSG508"))}}else{throw new Error(progress.data._getMsgText("jsdoMSG033","JSDOSession","the constructor","The options argument was missing or invalid."))}_name=options.name;_pdsession=new progress.data.Session({_storageKey:_name,_silent:true,authenticationModel:options.authenticationModel,serviceURI:options.serviceURI,jsdosession:this,authProvider:options.authProvider});try{if(options.context){this.setContext(options.context)}_pdsession.subscribe("online",this._onlineHandler,this);_pdsession.subscribe("offline",this._offlineHandler,this)}catch(err){_pdsession=undefined;throw err}};progress.data.JSDOSession.prototype=new progress.util.Observable;progress.data.JSDOSession.prototype.constructor=progress.data.JSDOSession;function validateJSDOSessionSubscribe(args,evt,listenerData){listenerData.operation=undefined;var found=false;this._eventNames.forEach(function(eventName){if(evt===eventName.toLowerCase()){found=true}});if(!found){throw new Error(progress.data._getMsgText("jsdoMSG042",evt))}if(args.length<2){throw new Error(progress.data._getMsgText("jsdoMSG038",2))}if(typeof args[0]!=="string"){throw new Error(progress.data._getMsgText("jsdoMSG039"))}if(typeof args[1]!=="function"){throw new Error(progress.data._getMsgText("jsdoMSG040"))}listenerData.fn=args[1];if(args.length>2){if(typeof args[2]!=="object"){throw new Error(progress.data._getMsgText("jsdoMSG041",evt))}listenerData.scope=args[2]}}progress.data.JSDOSession.prototype._eventNames=["offline","online"];progress.data.JSDOSession.prototype.validateSubscribe=validateJSDOSessionSubscribe;progress.data.JSDOSession.prototype.toString=function(radix){return"progress.data.JSDOSession"};progress.data.getSession=function(options){var deferred=new progress.util.Deferred,authProvider,authProviderInitObject={},session;function sessionRejectHandler(object,result,info){object=progress.util.Deferred.getParamObject(object,result,info);if(authProvider&&authProvider.hasClientCredentials()){var callback=function(){deferred.reject(object.result,object.info)};authProvider.logout().then(callback,callback)}else{deferred.reject(object.result,object.info)}}function callbackRejectHandler(reason){deferred.reject(progress.data.Session.GENERAL_FAILURE,{reason:reason})}function loginHandler(object){let jsdosession;try{if(typeof session==="undefined"){jsdosession=new progress.data.JSDOSession(options)}else{jsdosession=session}jsdosession.isAuthorized().then(function(){return jsdosession.addCatalog(options.catalogURI)},sessionRejectHandler).then(function(object,result,info){object=progress.util.Deferred.getParamObject(object,result,info);deferred.resolve(object.jsdosession,progress.data.Session.SUCCESS)},sessionRejectHandler)}catch(ex){sessionRejectHandler(jsdosession,progress.data.Session.GENERAL_FAILURE,{errorObject:ex})}}function callLogin(provider){var errorObject;if(typeof options.loginCallback!=="undefined"){options.loginCallback().then(function(result){try{provider.login(result.username,result.password).then(loginHandler,sessionRejectHandler)}catch(e){sessionRejectHandler(provider,progress.data.Session.GENERAL_FAILURE,{errorObject:e})}},callbackRejectHandler)}else if(options.username&&options.password){try{provider.login(options.username,options.password).then(loginHandler,sessionRejectHandler)}catch(e){sessionRejectHandler(provider,progress.data.Session.GENERAL_FAILURE,{errorObject:e})}}else{errorObject=new Error(progress.data._getMsgText("jsdoMSG052","getSession()"));sessionRejectHandler(provider,progress.data.Session.AUTHENTICATION_FAILURE,{errorObject:errorObject})}}if(typeof options!=="object"){throw new Error(progress.data._getMsgText("jsdoMSG503","getSession()","options","object"))}if(typeof options.loginCallback!=="undefined"&&typeof options.loginCallback!=="function"){throw new Error(progress.data._getMsgText("jsdoMSG503","getSession()","options.loginCallback","function"))}try{if(options.authenticationModel===progress.data.Session.AUTH_TYPE_SSO){if(!options.authenticationURI||!options.authProviderAuthenticationModel){throw new Error(progress.data._getMsgText("jsdoMSG509"))}}if(options.authenticationURI){authProviderInitObject.uri=options.authenticationURI;authProviderInitObject.authenticationModel=options.authProviderAuthenticationModel;if(typeof authProviderInitObject.authenticationModel!=="string"){throw new Error(progress.data._getMsgText("jsdoMSG502","progress.data.getSession","object","getSession","authProviderAuthenticationModel"))}}else{authProviderInitObject.uri=options.serviceURI;authProviderInitObject.authenticationModel=options.authenticationModel}authProvider=new progress.data.AuthenticationProvider(authProviderInitObject);options.authProvider=authProvider;if(authProvider.hasClientCredentials()){let jsdosession=new progress.data.JSDOSession(options),statusCode=0;jsdosession.isAuthorized().then(()=>{session=jsdosession;return},obj=>{statusCode=obj&&obj.info&&obj.info.xhr&&obj.info.xhr.status;return progress.util.Deferred.when([jsdosession.invalidate(),options.authProvider.logout()])}).then(()=>{if(statusCode===401){authProvider=new progress.data.AuthenticationProvider(authProviderInitObject);options.authProvider=authProvider;callLogin(authProvider)}else{loginHandler(authProvider)}})}else{if(authProvider.authenticationModel===progress.data.Session.AUTH_TYPE_ANON){authProvider.login().then(loginHandler,sessionRejectHandler)}else{callLogin(authProvider)}}}catch(error){sessionRejectHandler(null,progress.data.Session.GENERAL_FAILURE,{errorObject:error})}return deferred.promise()};progress.data.invalidateAllSessions=function(){var jsdosession,key,deferred=new progress.util.Deferred,jsdosessions=progress.data.ServicesManager._jsdosessions,invalidatePromises=[];try{for(key in jsdosessions){if(jsdosessions.hasOwnProperty(key)){jsdosession=jsdosessions[key];invalidatePromises.push(jsdosession.invalidate())}}progress.util.Deferred.when(invalidatePromises).then(function(){deferred.resolve(progress.data.Session.SUCCESS)},function(object,result,info){object=progress.util.Deferred.getParamObject(object,result,info);deferred.reject(progress.data.Session.GENERAL_FAILURE,info)})}catch(error){if(progress.util.Deferred.useJQueryPromises){throw error}else{deferred.reject(progress.data.Session.GENERAL_FAILURE,{errorObject:error})}}return deferred.promise()}})();if(typeof exports!=="undefined"){exports.progress=progress}(function(){"use strict";if(typeof progress==="undefined"){progress={}}if(typeof progress.data==="undefined"){progress.data={}}progress.data.AuthenticationProvider=function AuthenticationProvider(initObject){var authProv,authModel,uri;if(typeof initObject==="object"){this._checkStringArg("constructor",initObject.authenticationModel,"initObject.authenticationModel","initObject.authenticationModel");this._checkStringArg("constructor",initObject.uri,"init-object.uri","init-object.uri")}else{throw new Error(progress.data._getMsgText("jsdoMSG033","AuthenticationProvider","the constructor","The init-object argument was missing or invalid."))}authModel=initObject.authenticationModel.toLowerCase();switch(authModel){case progress.data.Session.AUTH_TYPE_ANON:this._initialize(initObject.uri,progress.data.Session.AUTH_TYPE_ANON,{_loginURI:progress.data.AuthenticationProvider._homeLoginURIBase});authProv=this;break;case progress.data.Session.AUTH_TYPE_BASIC:authProv=new progress.data.AuthenticationProviderBasic(initObject.uri);break;case progress.data.Session.AUTH_TYPE_FORM:authProv=new progress.data.AuthenticationProviderForm(initObject.uri);break;case progress.data.Session.AUTH_TYPE_FORM_SSO:authProv=new progress.data.AuthenticationProviderSSO(initObject.uri);break;case progress.data.Session.AUTH_TYPE_BEARER:authProv=new progress.data.AuthenticationProviderBearer(initObject.uri);break;default:throw new Error(progress.data._getMsgText("jsdoMSG502","AuthenticationProvider","init-object","constructor","authenticationModel"))}return authProv};progress.data.AuthenticationProvider.prototype._loginProto=function(sendParam){var deferred=new progress.util.Deferred,xhr,uriForRequest,header,that=this;try{if(this._loggedIn){throw new Error(progress.data._getMsgText("jsdoMSG051","AuthenticationProvider"))}xhr=new XMLHttpRequest;xhr.onreadystatechange=function(){if(xhr.readyState===4){try{that._processLoginResult(xhr,deferred)}catch(e){}}};if(progress.data.Session._useTimeStamp){uriForRequest=progress.data.Session._addTimeStampToURL(this._loginURI)}else{uriForRequest=this._loginURI}this._openLoginRequest(xhr,uriForRequest);xhr.setRequestHeader("Accept","application/json");xhr.send(sendParam)}catch(error){if(progress.util.Deferred.useJQueryPromises){throw error}else{deferred.reject(this,progress.data.Session.GENERAL_FAILURE,{errorObject:error})}}return deferred.promise()};progress.data.AuthenticationProvider.prototype.login=function(){return this._loginProto()};progress.data.AuthenticationProvider.prototype._openLoginRequest=function(xhr,uri){xhr.open("GET",uri,true);progress.data.Session._setNoCacheHeaders(xhr)};progress.data.AuthenticationProvider.prototype._processLoginResult=function(xhr,deferred){var result;if(xhr.status===200){this._loggedIn=true;this._storeInfo();result=progress.data.Session.SUCCESS}else if(xhr.status===401){result=progress.data.Session.AUTHENTICATION_FAILURE}else{result=progress.data.Session.GENERAL_FAILURE}this._settlePromise(deferred,result,{xhr:xhr})};progress.data.AuthenticationProvider.prototype.logout=function(){var deferred=new progress.util.Deferred;try{this._reset();deferred.resolve(this,progress.data.Session.SUCCESS,{})}catch(error){if(progress.util.Deferred.useJQueryPromises){throw error}else{deferred.reject(this,progress.data.Session.GENERAL_FAILURE,{errorObject:error})}}return deferred.promise()};progress.data.AuthenticationProvider.prototype.hasClientCredentials=function(){return this._loggedIn};progress.data.AuthenticationProvider.prototype.hasRefreshToken=function(){return false};progress.data.AuthenticationProvider.prototype._openRequestAndAuthorize=function(xhr,verb,uri,async,callback){var errorObject;if(this.hasClientCredentials()){xhr.open(verb,uri,async);xhr.setRequestHeader("Accept","application/json");callback(xhr)}else{errorObject=new Error(progress.data._getMsgText("jsdoMSG125","AuthenticationProvider"));callback(errorObject)}};progress.data.AuthenticationProvider.prototype._initialize=function(uriParam,authModel,targetURIs){var tempURI,target;Object.defineProperty(this,"uri",{get:function(){return this._uri},enumerable:true});Object.defineProperty(this,"authenticationModel",{get:function(){return this._authenticationModel},enumerable:true});if(uriParam[uriParam.length-1]==="/"){tempURI=uriParam.substring(0,uriParam.length-1)}else{tempURI=uriParam}for(target in targetURIs){if(targetURIs.hasOwnProperty(target)){this[target]=tempURI+targetURIs[target]}}this._authenticationModel=authModel;this._uri=uriParam;this._loggedIn=false;this._dataKeys={uri:".uri",loggedIn:".loggedIn"};if(typeof sessionStorage==="undefined"){throw new Error(progress.data._getMsgText("jsdoMSG126","AuthenticationProvider","sessionStorage"))}this._storage=sessionStorage;this._storageKey=this._uri;this._dataKeys.uri=this._storageKey+this._dataKeys.uri;this._dataKeys.loggedIn=this._storageKey+this._dataKeys.loggedIn;if(this._retrieveLoggedIn()){this._loggedIn=true}};progress.data.AuthenticationProvider.prototype._storeInfo=function(){this._storage.setItem(this._dataKeys.uri,JSON.stringify(this._uri));this._storage.setItem(this._dataKeys.loggedIn,JSON.stringify(this._loggedIn))};progress.data.AuthenticationProvider.prototype._retrieveInfoItem=function(propName){var jsonStr=this._storage.getItem(propName),value=null;if(jsonStr!==null){try{value=JSON.parse(jsonStr)}catch(e){value=null}}return value};progress.data.AuthenticationProvider.prototype._retrieveURI=function(){return this._retrieveInfoItem(this._dataKeys.uri)};progress.data.AuthenticationProvider.prototype._retrieveLoggedIn=function(){return this._retrieveInfoItem(this._dataKeys.loggedIn)};progress.data.AuthenticationProvider.prototype._clearInfo=function(info){this._storage.removeItem(this._dataKeys.uri);this._storage.removeItem(this._dataKeys.loggedIn)};progress.data.AuthenticationProvider.prototype._reset=function(){this._clearInfo();this._loggedIn=false};progress.data.AuthenticationProvider.prototype._settlePromise=function(deferred,result,info){if(result===progress.data.Session.SUCCESS){deferred.resolve(this,result,info)}else{deferred.reject(this,result,info)}};progress.data.AuthenticationProvider.prototype._checkStringArg=function(fnName,argToCheck,argPosition,argName){if(typeof argToCheck!=="string"){throw new Error(progress.data._getMsgText("jsdoMSG121","AuthenticationProvider",argPosition,"string",fnName))}else if(argToCheck.length===0){throw new Error(progress.data._getMsgText("jsdoMSG501","AuthenticationProvider",argName,fnName))}};progress.data.AuthenticationProvider._getAuthFailureReason=function(xhr){var contentType,jsonObject,result=progress.data.Session.AUTHENTICATION_FAILURE;if(xhr.status===401){contentType=xhr.getResponseHeader("Content-Type");if(contentType&&contentType.indexOf("application/json")>-1&&xhr.responseText){jsonObject=JSON.parse(xhr.responseText);if(jsonObject.error==="sso.token.expired_token"){result=progress.data.Session.EXPIRED_TOKEN}}}else{result=null}return result};Object.defineProperty(progress.data.AuthenticationProvider,"_homeLoginURIBase",{value:"/static/home.html",enumerable:true});Object.defineProperty(progress.data.AuthenticationProvider,"_springLoginURIBase",{value:"/static/auth/j_spring_security_check",enumerable:true});Object.defineProperty(progress.data.AuthenticationProvider,"_springLogoutURIBase",{value:"/static/auth/j_spring_security_logout",enumerable:true});Object.defineProperty(progress.data.AuthenticationProvider,"_springFormTokenLoginURIBase",{value:progress.data.AuthenticationProvider._springLoginURIBase+"?OECP=yes",enumerable:true});Object.defineProperty(progress.data.AuthenticationProvider,"_springFormTokenRefreshURIBase",{value:"/static/auth/token?op=refresh",enumerable:true})})();(function(){"use strict";progress.data.AuthenticationProviderBasic=function(uri){var defaultiOSBasicAuthTimeout,userName=null,password=null,fn;this._initialize(uri,progress.data.Session.AUTH_TYPE_BASIC,{_loginURI:progress.data.AuthenticationProvider._homeLoginURIBase});this._reset();function make_basic_auth_header(user,pw){var tok=user+":"+pw,hash=btoa(tok);return"Basic "+hash}this._reset=function(){userName=null;password=null;progress.data.AuthenticationProviderBasic.prototype._reset.apply(this)};this._openLoginRequest=function(xhr,uri){var auth;xhr.open("GET",uri,true);if(userName){auth=make_basic_auth_header(userName,password);xhr.setRequestHeader("Authorization",auth)}progress.data.Session._setNoCacheHeaders(xhr)};this._processLoginResult=function _basic_processLoginResult(xhr,deferred){progress.data.AuthenticationProviderBasic.prototype._processLoginResult.apply(this,[xhr,deferred]);if(!this._loggedIn){userName=null;password=null}};this.login=function(userNameParam,passwordParam){this._checkStringArg("login",userNameParam,1,"userName");this._checkStringArg("login",passwordParam,2,"password");userName=userNameParam;password=passwordParam;return this._loginProto()};this._openRequestAndAuthorize=function(xhr,verb,uri,async,callback){var auth,errorObject;if(this.hasClientCredentials()){xhr.open(verb,uri,async);if(userName){auth=make_basic_auth_header(userName,password);xhr.setRequestHeader("Authorization",auth)}progress.data.Session._setNoCacheHeaders(xhr);callback(xhr)}else{errorObject=new Error(progress.data._getMsgText("jsdoMSG125","AuthenticationProvider"));callback(errorObject)}}};function BasicProxy(){}BasicProxy.prototype=progress.data.AuthenticationProvider.prototype;progress.data.AuthenticationProviderBasic.prototype=new BasicProxy;progress.data.AuthenticationProviderBasic.prototype.constructor=progress.data.AuthenticationProviderBasic})();(function(){"use strict";progress.data.AuthenticationProviderBearer=function(uri){var bearerToken=null,fn;this._initialize(uri,progress.data.Session.AUTH_TYPE_BEARER,{_loginURI:progress.data.AuthenticationProvider._homeLoginURIBase});function make_Bearer_auth_header(token){return"Bearer "+token}this._reset=function(){bearerToken=null;progress.data.AuthenticationProviderBearer.prototype._reset.apply(this)};this._openLoginRequest=function(xhr,uri){var auth;xhr.open("GET",uri,true);if(bearerToken){auth=make_Bearer_auth_header(bearerToken);xhr.setRequestHeader("Authorization",auth)}progress.data.Session._setNoCacheHeaders(xhr)};this._processLoginResult=function _Bearer_processLoginResult(xhr,deferred){progress.data.AuthenticationProviderBearer.prototype._processLoginResult.apply(this,[xhr,deferred]);if(!this._loggedIn){bearerToken=null}};this.login=function(token){this._checkStringArg("login",token,1,"token");bearerToken=token;return this._loginProto()};this._openRequestAndAuthorize=function(xhr,verb,uri,async,callback){var auth,errorObject;if(this.hasClientCredentials()){xhr.open(verb,uri,async);if(bearerToken){auth=make_Bearer_auth_header(bearerToken);xhr.setRequestHeader("Authorization",auth)}progress.data.Session._setNoCacheHeaders(xhr)}else{errorObject=new Error(progress.data._getMsgText("jsdoMSG125","AuthenticationProvider"))}callback(errorObject)}};function BearerProxy(){}BearerProxy.prototype=progress.data.AuthenticationProvider.prototype;progress.data.AuthenticationProviderBearer.prototype=new BearerProxy;progress.data.AuthenticationProviderBearer.prototype.constructor=progress.data.AuthenticationProviderBearer})();(function(){"use strict";var fn;progress.data.AuthenticationProviderForm=function(uri){this._initialize(uri,progress.data.Session.AUTH_TYPE_FORM,{_loginURI:progress.data.AuthenticationProvider._springLoginURIBase,_logoutURI:progress.data.AuthenticationProvider._springLogoutURIBase})};function FormProxy(){}FormProxy.prototype=progress.data.AuthenticationProvider.prototype;progress.data.AuthenticationProviderForm.prototype=new FormProxy;progress.data.AuthenticationProviderForm.prototype.constructor=progress.data.AuthenticationProviderForm;progress.data.AuthenticationProviderForm.prototype.login=function(userNameParam,passwordParam){var deferred=new progress.util.Deferred,xhr,that=this;this._checkStringArg("login",userNameParam,1,"userName");this._checkStringArg("login",passwordParam,2,"password");return this._loginProto("j_username="+encodeURIComponent(userNameParam)+"&j_password="+encodeURIComponent(passwordParam)+"&submit=Submit")};progress.data.AuthenticationProviderForm.prototype._openLoginRequest=function(xhr,uri){xhr.open("POST",uri,true);xhr.setRequestHeader("Cache-Control","max-age=0");xhr.setRequestHeader("Pragma","no-cache");xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");xhr.withCredentials=true};progress.data.AuthenticationProviderForm.prototype.logout=function(){var deferred=new progress.util.Deferred,xhr,that=this;try{if(!this._loggedIn){deferred.resolve(this,progress.data.Session.SUCCESS,{})}else{xhr=new XMLHttpRequest;this._openLogoutRequest(xhr);xhr.onreadystatechange=function(){if(xhr.readyState===4){try{that._processLogoutResult(xhr,deferred)}catch(e){}}};xhr.send()}this._reset()}catch(error){if(progress.util.Deferred.useJQueryPromises){throw error}else{deferred.reject(this,progress.data.Session.GENERAL_FAILURE,{errorObject:error})}}return deferred.promise()};progress.data.AuthenticationProviderForm.prototype._openLogoutRequest=function(xhr){xhr.open("GET",this._logoutURI,true);xhr.setRequestHeader("Cache-Control","max-age=0");xhr.withCredentials=true;xhr.setRequestHeader("Accept","application/json")};progress.data.AuthenticationProviderForm.prototype._processLogoutResult=function(xhr,deferred){var result;if(xhr.status===200){result=progress.data.Session.SUCCESS}else if(xhr.status===401){result=progress.data.Session.SUCCESS}else{result=progress.data.Session.GENERAL_FAILURE}this._settlePromise(deferred,result,{xhr:xhr})};fn=progress.data.AuthenticationProviderForm.prototype._openRequestAndAuthorize;progress.data.AuthenticationProviderForm.prototype._openRequestAndAuthorize=function(xhr,verb,uri,async,callback){function afterSuper(errorObject){if(errorObject instanceof Error){callback(errorObject)}else{xhr.withCredentials=true;callback(xhr)}}try{progress.data.AuthenticationProviderForm.prototype._openRequestAndAuthorize._super.apply(this,[xhr,verb,uri,async,afterSuper])}catch(e){callback(e)}};progress.data.AuthenticationProviderForm.prototype._openRequestAndAuthorize._super=fn})();(function(){"use strict";var fn;progress.data.AuthenticationProviderSSO=function(uri){var that=this,_automaticTokenRefresh,temp,ssoTokenInfo=null,tokenDataKeys={token:".access_token",refreshToken:".refresh_token",tokenType:".token_type",expiration:".expires_in",accessTokenExpiration:".accessTokenExpiration"};function storeTokenInfo(info){var date,accessTokenExpiration;if(info.access_token.length){that._storage.setItem(tokenDataKeys.token,JSON.stringify(info.access_token))}if(info.refresh_token.length){that._storage.setItem(tokenDataKeys.refreshToken,JSON.stringify(info.refresh_token));date=new Date;accessTokenExpiration=date.getTime()+info.expires_in*1e3*.75;that._storage.setItem(tokenDataKeys.accessTokenExpiration,JSON.stringify(accessTokenExpiration))}else{that._storage.removeItem(tokenDataKeys.refreshToken);that._storage.removeItem(tokenDataKeys.accessTokenExpiration)}that._storage.setItem(tokenDataKeys.tokenType,JSON.stringify(info.token_type));that._storage.setItem(tokenDataKeys.expiration,JSON.stringify(info.expires_in))}function retrieveTokenProperty(propName){var jsonStr=that._storage.getItem(propName),value=null;if(jsonStr!==null){try{value=JSON.parse(jsonStr)}catch(e){value=null}}return value}function retrieveToken(){return retrieveTokenProperty(tokenDataKeys.token)}function retrieveRefreshToken(){return retrieveTokenProperty(tokenDataKeys.refreshToken)}function retrieveAccessTokenExpiration(){return retrieveTokenProperty(tokenDataKeys.accessTokenExpiration)}function retrieveTokenType(){return retrieveTokenProperty(tokenDataKeys.tokenType)}function getToken(){return retrieveToken()}function retrieveExpiration(){return retrieveTokenProperty(tokenDataKeys.expiration)}function clearTokenInfo(info){that._storage.removeItem(tokenDataKeys.token);that._storage.removeItem(tokenDataKeys.refreshToken);that._storage.removeItem(tokenDataKeys.tokenType);that._storage.removeItem(tokenDataKeys.expiration);that._storage.removeItem(tokenDataKeys.accessTokenExpiration)}function openRefreshRequest(xhr){xhr.open("POST",that._refreshURI,true);xhr.setRequestHeader("Cache-Control","max-age=0");xhr.withCredentials=true;xhr.setRequestHeader("Content-Type","application/json");xhr.setRequestHeader("Accept","application/json")}function processRefreshResult(xhr,deferred){var errorObject,result,ssoTokenJSON;if(xhr.status===200){try{ssoTokenInfo=JSON.parse(xhr.responseText);if(ssoTokenInfo.access_token){storeTokenInfo(ssoTokenInfo);result=progress.data.Session.SUCCESS}else{result=progress.data.Session.GENERAL_FAILURE;errorObject=new Error(progress.data._getMsgText("jsdoMSG049","AuthenticationProvider","refresh",progress.data._getMsgText("jsdoMSG050")))}}catch(ex){result=progress.data.Session.GENERAL_FAILURE;errorObject=new Error(progress.data._getMsgText("jsdoMSG049","AuthenticationProvider","refresh",ex.message))}}else if(xhr.status===401){that._reset();result=progress.data.Session.AUTHENTICATION_FAILURE}else{result=progress.data.Session.GENERAL_FAILURE}that._settlePromise(deferred,result,{xhr:xhr,errorObject:errorObject})}this._processLoginResult=function(xhr,deferred){var errorObject,result,ssoTokenJSON;if(xhr.status===200){this._loggedIn=true;try{ssoTokenInfo=JSON.parse(xhr.responseText);if(ssoTokenInfo.access_token){storeTokenInfo(ssoTokenInfo);result=progress.data.Session.SUCCESS}else{result=progress.data.Session.GENERAL_FAILURE;errorObject=new Error(progress.data._getMsgText("jsdoMSG049","AuthenticationProvider","login",progress.data._getMsgText("jsdoMSG050")))}}catch(ex){result=progress.data.Session.GENERAL_FAILURE;errorObject=new Error(progress.data._getMsgText("jsdoMSG049","AuthenticationProvider","login",ex.message))}if(result!==progress.data.Session.SUCCESS){var callback=function(params){params=progress.util.Deferred.getParamObject(params);params.provider._settlePromise(deferred,result,{xhr:xhr,errorObject:errorObject})};this.logout().then(callback,callback);return}}else if(xhr.status===401){result=progress.data.Session.AUTHENTICATION_FAILURE}else{result=progress.data.Session.GENERAL_FAILURE}this._settlePromise(deferred,result,{xhr:xhr})};this._reset=function(){progress.data.AuthenticationProviderSSO.prototype._reset.apply(this);clearTokenInfo();ssoTokenInfo=null};this._openRequestAndAuthorize=function(xhr,verb,uri,async,callback){var that=this,date,errorObject;function afterRefreshCheck(provider,result,info){if(result===progress.data.Session.AUTHENTICATION_FAILURE){callback(new Error(progress.data._getMsgText("jsdoMSG060")))}else{progress.data.AuthenticationProviderSSO.prototype._openRequestAndAuthorize.apply(that,[xhr,verb,uri,async,function(errorObject){if(errorObject instanceof Error){callback(errorObject)}else{xhr.setRequestHeader("Authorization","oecp "+getToken());callback(xhr)}}])}}if(this.hasClientCredentials()){date=new Date;if(this.automaticTokenRefresh&&this.hasRefreshToken()&&date.getTime()>retrieveAccessTokenExpiration()){try{var callback=function(params,result,info){params=progress.util.Deferred.getParamObject(params,result,info);afterRefreshCheck(params.provider,params.result,params.info)};this.refresh().then(callback,callback)}catch(e){callback(e)}}else{afterRefreshCheck(this,progress.data.Session.SUCCESS,null)}}else{errorObject=new Error(progress.data._getMsgText("jsdoMSG125","AuthenticationProvider"));callback(errorObject)}};this.hasClientCredentials=function(){return retrieveToken()===null?false:true};this.refresh=function(){var deferred=new progress.util.Deferred,xhr;try{if(!this._loggedIn){throw new Error(progress.data._getMsgText("jsdoMSG053","AuthenticationProvider","refresh"))}if(!this.hasRefreshToken()){throw new Error(progress.data._getMsgText("jsdoMSG054","AuthenticationProvider"))}xhr=new XMLHttpRequest;openRefreshRequest(xhr);xhr.onreadystatechange=function(){if(xhr.readyState===4){try{processRefreshResult(xhr,deferred)}catch(e){}}};xhr.send('{"token_type":"'+retrieveTokenType()+'","refresh_token":"'+retrieveRefreshToken()+'"}')}catch(error){if(progress.util.Deferred.useJQueryPromises){throw error}else{deferred.reject(this,progress.data.Session.GENERAL_FAILURE,{errorObject:error})}}return deferred.promise()};this.hasRefreshToken=function(){return retrieveRefreshToken()===null?false:true};this._initialize(uri,progress.data.Session.AUTH_TYPE_FORM_SSO,{_loginURI:progress.data.AuthenticationProvider._springFormTokenLoginURIBase,_logoutURI:progress.data.AuthenticationProvider._springLogoutURIBase,_refreshURI:progress.data.AuthenticationProvider._springFormTokenRefreshURIBase});_automaticTokenRefresh=true;Object.defineProperty(this,"automaticTokenRefresh",{get:function(){return _automaticTokenRefresh},set:function(value){if(value===true||value===false){_automaticTokenRefresh=value}else{throw new Error(progress.data._getMsgText("jsdoMSG061","AuthenticationProvider","automaticTokenRefresh"))}},enumerable:true});this._dataKeys.automaticTokenRefresh=this._storageKey+".automaticTokenRefresh";temp=this._retrieveInfoItem(this._dataKeys.automaticTokenRefresh);if(temp===false){_automaticTokenRefresh=false}tokenDataKeys.token=this._storageKey+tokenDataKeys.token;tokenDataKeys.refreshToken=this._storageKey+tokenDataKeys.refreshToken;tokenDataKeys.tokenType=this._storageKey+tokenDataKeys.tokenType;tokenDataKeys.expiration=this._storageKey+tokenDataKeys.expiration;tokenDataKeys.accessTokenExpiration=this._storageKey+tokenDataKeys.accessTokenExpiration;if(retrieveToken()){this._loggedIn=true}};function SSOProxy(){}SSOProxy.prototype=progress.data.AuthenticationProviderForm.prototype;progress.data.AuthenticationProviderSSO.prototype=new SSOProxy;progress.data.AuthenticationProviderSSO.prototype.constructor=progress.data.AuthenticationProviderSSO;fn=progress.data.AuthenticationProviderSSO.prototype._storeInfo;progress.data.AuthenticationProviderSSO.prototype._storeInfo=function(){progress.data.AuthenticationProviderSSO.prototype._storeInfo._super.apply(this);this._storage.setItem(this._dataKeys.automaticTokenRefresh,JSON.stringify(this._automaticTokenRefresh))};progress.data.AuthenticationProviderSSO.prototype._storeInfo._super=fn;fn=progress.data.AuthenticationProviderSSO.prototype._clearInfo;progress.data.AuthenticationProviderSSO.prototype._clearInfo=function(){progress.data.AuthenticationProviderSSO.prototype._clearInfo._super.apply(this);this._storage.removeItem(this._dataKeys.automaticTokenRefresh)};progress.data.AuthenticationProviderSSO.prototype._clearInfo._super=fn})();if(typeof kendo!=="undefined"){(function(){var JSDODataReader,JSDOTransport,JSDOObservable=new kendo.Observable;function initializeJSDO(transport,options){var jsdo,resourceName;if(options.jsdo instanceof progress.data.JSDO){jsdo=options.jsdo}else if(typeof options.jsdo==="string"){resourceName=options.jsdo;jsdo=new progress.data.JSDO({name:resourceName})}else{throw new Error("JSDO: jsdo property must be either a JSDO instance or a string.")}if(transport.tableRef===undefined&&jsdo._defaultTableRef){transport.tableRef=jsdo._defaultTableRef._name}if(transport.tableRef===undefined){throw new Error("JSDO: A tableRef must be specified when using a multi-table DataSet.")}else if(jsdo[transport.tableRef]===undefined){throw new Error("JSDO: tableRef '"+transport.tableRef+"' is not present in JSDO definition.")}return jsdo}JSDODataReader=kendo.data.readers.json.extend({init:function(arg1){var event={},transport;JSDOObservable.trigger("info",event);transport=this.transport=event.sender._events.info.transport;kendo.data.readers.json.fn.init.call(this,arg1);this.model=kendo.data.Model.define({init:function(data){var record;if(!data||jQuery.isEmptyObject(data)){data=transport._getInitialValues()}record=transport._convertDataTypes(data);transport.jsdo._deleteProdsProperties(record,true);kendo.data.Model.fn.init.call(this,record)},id:"_id",fields:transport._getModel()})},total:function(data){return data.total||(data.data?data.data.length:data.length)},data:function(data){return data.data||data}});JSDOTransport=kendo.data.RemoteTransport.extend({init:function(options){var transport=this,fnName;if(options.tableRef!==undefined){transport.tableRef=options.tableRef}transport.jsdo=initializeJSDO(transport,options);transport._initFromServer=false;transport.autoSave=options.autoSave!==undefined?options.autoSave:true;transport.readLocal=options.readLocal!==undefined?options.readLocal:false;transport.countFnName=options.countFnName;transport.useArrays=options.useArrays!==undefined?options.useArrays:false;if(transport.countFnName!==undefined){if(typeof transport.jsdo[transport.countFnName]!=="function"){throw new Error("Invoke operation '"+transport.countFnName+"' for countFnName is not defined.")}}else if(transport.jsdo._resource.generic.count!==undefined){for(fnName in transport.jsdo._resource.fn){if(transport.jsdo._resource.fn.hasOwnProperty(fnName)){if(transport.jsdo._resource.generic.count===transport.jsdo._resource.fn[fnName]["function"]){transport.countFnName=fnName;break}}}}JSDOObservable.one("info",function(e){e.sender._events.info.transport=transport});transport._initConvertTypes();kendo.data.RemoteTransport.fn.init.call(this,options)},_initConvertTypes:function(){var transport=this,i,schema,fieldName,dateFields=[],arrayFields=[],convertDateFields=false;transport._convertTypes=false;schema=transport.jsdo[transport.tableRef].getSchema();for(i=0;i0&&fieldName.charAt(0)!=="_"){if(schema[i].type==="string"&&schema[i].format&&schema[i].format.indexOf("date")!==-1){dateFields.push(fieldName);if(!convertDateFields){convertDateFields=true}}else if(!transport.useArrays&&schema[i].type==="array"){arrayFields.push(fieldName);if(!convertDateFields&&schema[i].ablType&&schema[i].ablType.indexOf("DATE")===0){convertDateFields=true}}}}if(dateFields.length>0||arrayFields.length>0){transport._convertTypes=true;transport._convertFields={};transport._convertFields._arrayFields=[];transport._convertFields._dateFields=[]}if(dateFields.length>0){transport._convertFields._dateFields=dateFields}if(convertDateFields){transport._convertFields._datePattern=new RegExp("^([0-9]+)?-([0-9]{2})?-([0-9]{2})?$");transport._convertFields._dateTimePattern=new RegExp("^([0-9]+)?-([0-9]{2})?-([0-9]{2})?"+"T([0-9]{2})?:([0-9]{2})?:([0-9]{2})?.([0-9]{3})?$")}if(arrayFields.length>0){transport._convertFields._arrayFields=arrayFields}},_convertStringToDate:function(data,fieldName,targetFieldName){var transport=this,array,ablType,orig;if(!targetFieldName){targetFieldName=fieldName}array=transport._convertFields._datePattern.exec(data[targetFieldName])||[];if(array.length>0){data[targetFieldName]=new Date(parseInt(array[1],10),parseInt(array[2],10)-1,parseInt(array[3],10))}else{ablType=transport.jsdo[transport.tableRef]._fields[fieldName.toLowerCase()].ablType;if(ablType==="DATETIME"){array=transport._convertFields._dateTimePattern.exec(data[targetFieldName])||[];if(array.length>0){data[targetFieldName]=new Date(parseInt(array[1],10),parseInt(array[2],10)-1,parseInt(array[3],10),parseInt(array[4],10),parseInt(array[5],10),parseInt(array[6],10),parseInt(array[7],10))}}if(typeof data[targetFieldName]==="string"){orig=data[targetFieldName];try{data[targetFieldName]=new Date(data[targetFieldName])}catch(e){data[targetFieldName]=orig;console.log(progress.data._getMsgText("jsdoMSG000","_convertStringToDate() could not convert to date object: "+orig))}}}},_convertDataTypes:function(data){var transport=this,i,k,fieldName,schemaInfo,prefixElement,elementName,copy;delete data["prods:rowState"];if(!transport.useArrays&&transport._convertTypes&&transport._convertFields._arrayFields.length>0){copy={};transport.jsdo._copyRecord(transport.jsdo._buffers[transport.tableRef],data,copy);data=copy}if(!transport._convertTypes){return data}for(k=0;k0&&schema[i].name.charAt(0)!=="_"){type=schema[i].type;if(type==="integer"){type="number"}else if(type==="string"&&schema[i].format&&schema[i].format.indexOf("date")!==-1){type="date"}if(type==="array"){for(j=0;j0&&schema[i].name.charAt(0)!=="_"){defaultValue=transport.jsdo._getDefaultValue(schema[i]);if(schema[i].type==="array"){data[schema[i].name]=[];for(j=0;j0||jsdo[this.tableRef]._data instanceof Array&&jsdo[this.tableRef]._data.length>0}else{this._initFromServer=jsdo[this.tableRef]._data instanceof Array&&jsdo[this.tableRef]._data.length>0}}data.data=[];if(this.readLocal&&this._initFromServer){saveUseRelationships=jsdo.useRelationships;jsdo.useRelationships=false;data=this._getData(options);jsdo.useRelationships=saveUseRelationships;options.success(data);return}if(!this.readLocal){if(options.data){for(property in options.data){if(options.data.hasOwnProperty(property)){if(options.data[property]!==undefined&&optionsMapping[property]){if(filter===undefined){filter={}}filter[optionsMapping[property]]=options.data[property]}}}if(filter){filter.tableRef=this.tableRef}}}callback=function onAfterFillJSDO(object,success,request){var data={},saveUseRelationships,promise,total,exception,jsdo;object=progress.util.Deferred.getParamObject(object,success,request);jsdo=object.jsdo;success=object.success;request=object.request;if(success){saveUseRelationships=jsdo.useRelationships;jsdo.useRelationships=false;if(transport.readLocal){data=transport._getData(options)}else{data.data=jsdo[transport.tableRef].getData();total=jsdo.getProperty("server.count");if(total){data.total=total}}jsdo.useRelationships=saveUseRelationships;transport._initFromServer=true;if(options.data&&options.data.take){if(!transport.readLocal&&transport.countFnName!==undefined&&typeof jsdo[transport.countFnName]==="function"){if(options.data.skip===0&&options.data.take>data.data.length){options.success(data);return}promise=jsdo.invoke(transport.countFnName,{filter:request.objParam.filter});promise.then(function(object,success,request){var exception,total,jsdo;object=progress.util.Deferred.getParamObject(object,success,request);jsdo=object.jsdo;success=object.success;request=object.request;try{if(typeof request.response==="object"&&Object.keys(request.response).length===1){total=request.response[Object.keys(request.response)];if(typeof total!=="number"){total=undefined}}}catch(e){}if(total!==undefined){if(total){data.total=total}options.success(data)}else{exception=new Error("Unexpected response from '"+transport.countFnName+"' operation.");options.error(request.xhr,request.xhr.status,exception)}},function(object,success,request){var exception,jsdo;object=progress.util.Deferred.getParamObject(object,success,request);jsdo=object.jsdo;success=object.success;request=object.request;exception=new Error("Error invoking '"+transport.countFnName+"' operation.");options.error(request.xhr,request.xhr.status,exception)})}else{options.success(data)}}else{options.success(data)}}else{exception=new Error("Error while reading records.");options.error(request.xhr,request.xhr.status,exception)}};jsdo.fill(filter).then(callback,callback)}catch(e){options.error(null,null,e)}},_processChanges:function(options,request){var jsdo=this.jsdo,transport=this,array,i,jsrecord,id,record;if(options.batch){array=[];if(options.data.created instanceof Array){if(jsdo._resource.idProperty){if(request.jsrecords){for(i=0;i= 200 && xhr.status < 300) - || (xhr.status === 0 && xhr.responseText !== "")) { - - request.success = true; - // get the Client Context ID (AppServer ID) - xhr.jsdo._session._saveClientContextId(xhr); - if ((typeof xhr.onSuccessFn) == 'function') { - var operation; - if (xhr.request.fnName !== undefined - && xhr.jsdo._resource.fn[xhr.request.fnName] !== undefined) { - operation = xhr.jsdo._resource.fn[xhr.request.fnName].operation; + try { + if ((xhr.status >= 200 && xhr.status < 300) + || (xhr.status === 0 && xhr.responseText !== "")) { + + request.success = true; + // get the Client Context ID (AppServer ID) + xhr.jsdo._session._saveClientContextId(xhr); + if ((typeof xhr.onSuccessFn) == 'function') { + var operation; + if (xhr.request.fnName !== undefined + && xhr.jsdo._resource.fn[xhr.request.fnName] !== undefined) { + operation = xhr.jsdo._resource.fn[xhr.request.fnName].operation; + } + else + operation = null; + if ((operation === undefined) || (operation !== null && operation.mergeMode)) + xhr.jsdo._mergeInvoke(request.response, xhr); + if (request.success) + xhr.onSuccessFn(xhr.jsdo, request.success, request); + else if ((typeof xhr.onErrorFn) == 'function') + xhr.onErrorFn(xhr.jsdo, request.success, request); } - else - operation = null; - if ((operation === undefined) || (operation !== null && operation.mergeMode)) - xhr.jsdo._mergeInvoke(request.response, xhr); - if (request.success) - xhr.onSuccessFn(xhr.jsdo, request.success, request); - else if ((typeof xhr.onErrorFn) == 'function') - xhr.onErrorFn(xhr.jsdo, request.success, request); - } - } else { - request.success = false; - if (xhr.status === 0) { - request.exception = new Error(msg.getMsgText("jsdoMSG101")); + } else { + request.success = false; + if (xhr.status === 0) { + request.exception = new Error(msg.getMsgText("jsdoMSG101")); + } + if ((typeof xhr.onErrorFn) == 'function') { + xhr.onErrorFn(xhr.jsdo, request.success, request); + } } + } catch (e) { + request.success = false; + request.exception = e; if ((typeof xhr.onErrorFn) == 'function') { xhr.onErrorFn(xhr.jsdo, request.success, request); } } - } catch (e) { - request.success = false; - request.exception = e; - if ((typeof xhr.onErrorFn) == 'function') { - xhr.onErrorFn(xhr.jsdo, request.success, request); + // get the Client Context ID (AppServer ID) + xhr.jsdo._session._checkServiceResponse(xhr, request.success, request); + + if ((typeof xhr.onCompleteFn) == 'function') { + xhr.onCompleteFn(xhr.jsdo, request.success, request); } - } - // get the Client Context ID (AppServer ID) - xhr.jsdo._session._checkServiceResponse(xhr, request.success, request); - if ((typeof xhr.onCompleteFn) == 'function') { - xhr.onCompleteFn(xhr.jsdo, request.success, request); + } catch (e) { + request.success = false; + request.exception = e; + if ((typeof xhr.onErrorFn) == 'function') { + xhr.onErrorFn(xhr.jsdo, request.success, request); + } + } } - - } }; /* @@ -8271,8 +8283,17 @@ limitations under the License. } } + // Christian Bryan - 10.02.2019 Add this back in + // Mike Fechner, Consultingwerk Ltd. 16.03.2016 + // Adding the tableRef property of the JSDO Parameters to + // the Filter Parameter so that the backend can use this + // information to actually know which Business Entity Table + // the query filter string is intended for ... + filter = JSON.stringify({ ablFilter: ablFilter, + tableRef: params.tableRef, + viewTables: jsdo.viewTables, sqlQuery: sqlQuery, orderBy: sortFields, skip: params.skip, @@ -8727,9 +8748,8 @@ limitations under the License. //this is so that we can see the code in Chrome's Source tab when script is loaded via XHR //# sourceURL=progress.jsdo.js /* -progress.session.js Version: 6.0.1 -Copyright (c) 2012-2018 Progress Software Corporation and/or its subsidiaries or affiliates. +Copyright (c) 2012-2019 Progress Software Corporation and/or its subsidiaries or affiliates. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -9525,7 +9545,9 @@ limitations under the License. // connects to online the last time it was checked? // (value is always false if session is not logged in) oepingAvailable = false, - defaultPartialPingURI = "/rest/_oeping", + hasResolvedPingURI = false, + defaultPartialPingURI = "/rest/_oepingService/_oeping", + classicPartialPingURI = "/rest/_oeping", partialPingURI = defaultPartialPingURI, _storageKey, _authProvider = null, @@ -9724,6 +9746,7 @@ limitations under the License. case progress.data.Session.AUTH_TYPE_BASIC: case progress.data.Session.AUTH_TYPE_ANON: case progress.data.Session.AUTH_TYPE_SSO: + case progress.data.Session.AUTH_TYPE_BEARER: case null: _authenticationModel = newval; storeSessionInfo("authenticationModel", newval); @@ -10833,7 +10856,8 @@ limitations under the License. xhr._jsdosession = jsdosession; // in case the caller is a JSDOSession xhr._deferred = deferred; // in case the caller is a JSDOSession if (this.authenticationModel === progress.data.Session.AUTH_TYPE_FORM || - this.authenticationModel === progress.data.Session.AUTH_TYPE_BASIC) { + this.authenticationModel === progress.data.Session.AUTH_TYPE_BASIC || + this.authenticationModel === progress.data.Session.AUTH_TYPE_BEARER) { if (isAsync) { xhr.onreadystatechange = this._onReadyStateChangeGeneric; xhr.onResponseFn = this._processLogoutResult; @@ -10929,7 +10953,8 @@ limitations under the License. } else if (xhr.status !== 200) { /* Determine whether an error returned from the server is really an error */ - if (pdsession.authenticationModel === progress.data.Session.AUTH_TYPE_BASIC) { + if (pdsession.authenticationModel === progress.data.Session.AUTH_TYPE_BASIC || + pdsession.authenticationModel === progress.data.Session.AUTH_TYPE_BEARER) { /* If the Auth model is Basic, we probably got back a 404 Not found. * But that's OK, because logout from Basic is meaningless on the * server side unless it happens to be stateful, which is the only @@ -11645,40 +11670,71 @@ limitations under the License. this._onReadyStateChangePing = function () { var xhr = this; var args; - - if (xhr.readyState === 4) { - args = { - xhr: xhr, - fireEventIfOfflineChange: true, - offlineReason: null - }; - that._processPingResult(args); - if (_pingInterval > 0) { - _timeoutID = setTimeout(that._autoping, _pingInterval); + try { + if (xhr.readyState === 4) { + args = { + xhr: xhr, + fireEventIfOfflineChange: true, + offlineReason: null + }; + that._processPingResult(args); + if (_pingInterval > 0) { + _timeoutID = setTimeout(that._autoping, _pingInterval); + } } + } catch(e) { } }; this._pingtestOnReadyStateChange = function () { var xhr = this; + try { + if (xhr.readyState === 4) { + var foundOeping = false; + if (xhr.status >= 200 && xhr.status < 300) { + foundOeping = true; + } else { + setPartialPingURI(that.loginTarget); + console.warn("Default ping target not available, will use loginTarget instead."); + } + setOepingAvailable(foundOeping); - if (xhr.readyState === 4) { - var foundOeping = false; - if (xhr.status >= 200 && xhr.status < 300) { - foundOeping = true; - } else { - setPartialPingURI(that.loginTarget); - console.warn("Default ping target not available, will use loginTarget instead."); + // If we're here, we've just logged in. If pingInterval has been set, we need + // to start autopinging + if (_pingInterval > 0) { + _timeoutID = setTimeout(that._autoping, _pingInterval); + } } - setOepingAvailable(foundOeping); + } catch(e) { + } + }; + + var resolvePingURI = () => { + var xhr = new XMLHttpRequest(), + deferred = new progress.util.Deferred(); - // If we're here, we've just logged in. If pingInterval has been set, we need - // to start autopinging - if (_pingInterval > 0) { - _timeoutID = setTimeout(that._autoping, _pingInterval); + xhr.onreadystatechange = () => { + if (xhr.readyState === 4) { + // If we can't find the new ping endpoint, we go back to the Classic Ping URI. + if (xhr.status === 404) { + setPartialPingURI(classicPartialPingURI); + deferred.reject(false); + } else { + deferred.resolve(true); + } + hasResolvedPingURI = true; } + }; + + // if we've resolved the pingURI OR we haven't logged in, then we don't have to do anything + if (hasResolvedPingURI || (this.loginResult !== progress.data.Session.LOGIN_SUCCESS && !this.authProvider)) { + deferred.resolve(true); + } else { + this._openRequest(xhr, "GET", partialPingURI, true, () => xhr.send()); } - }; + + return deferred.promise(); + } /* * args: pingURI @@ -11691,6 +11747,8 @@ limitations under the License. var xhr = new XMLHttpRequest(), that = this; + args.xhr = xhr; + function sendPingAfterOpen() { if (args.async) { xhr.onreadystatechange = args.onReadyStateFn; @@ -11710,30 +11768,35 @@ limitations under the License. xhr.send(null); } - try { - if (this._authProvider) { - this._authProvider._openRequestAndAuthorize( - xhr, - 'GET', - args.pingURI, - args.async, - sendPingAfterOpen - ); - } else { - // get rid of this if we do away with synchronous support (i.e., customer use of - // old Session API) - this._setXHRCredentials(xhr, "GET", args.pingURI, this.userName, _password, args.async); - - // Sending the XHR request after opening the channel - if (xhr.readyState === 1) { - sendPingAfterOpen(); + resolvePingURI().then(() => { + // do nothing on success because the new oePingService was found + }, () => { + // re-create the pingURI since we changed to the old classic AppServer ping URI + args.pingURI = this._makePingURI(); + }).then(() => { + try { + if (this._authProvider) { + this._authProvider._openRequestAndAuthorize( + xhr, + 'GET', + args.pingURI, + args.async, + sendPingAfterOpen + ); + } else { + // get rid of this if we do away with synchronous support (i.e., customer use of + // old Session API) + this._setXHRCredentials(xhr, "GET", args.pingURI, this.userName, _password, args.async); + + // Sending the XHR request after opening the channel + if (xhr.readyState === 1) { + sendPingAfterOpen(); + } } + } catch (e) { + args.error = e; } - } catch (e) { - args.error = e; - } - - args.xhr = xhr; + }) }; this._makePingURI = function () { @@ -12314,7 +12377,15 @@ limitations under the License. enumerable: true } ); - + Object.defineProperty( + progress.data.Session, + 'AUTH_TYPE_BEARER', + { + value: "bearer", + enumerable: true + } + ); + Object.defineProperty( progress.data.Session, 'DEVICE_OFFLINE', @@ -12369,6 +12440,7 @@ limitations under the License. progress.data.Session.AUTH_TYPE_BASIC = "basic"; progress.data.Session.AUTH_TYPE_FORM = "form"; progress.data.Session.AUTH_TYPE_SSO = "sso"; + progress.data.Session.AUTH_TYPE_BEARER = "bearer"; /* deliberately not including the "offline reasons" that are defined in the * 1st part of the conditional. We believe that we can be used only in environments where @@ -13192,34 +13264,36 @@ limitations under the License. var xhr = this, cbresult, info; - - if (xhr.readyState === 4) { - info = { - xhr: xhr, - offlineReason: undefined, - fireEventIfOfflineChange: true, - usingOepingFormat: false - }; - - // call _processPingResult because it has logic for - // detecting change in online/offline state - _pdsession._processPingResult(info); - - if (xhr.status >= 200 && xhr.status < 300) { - deferred.resolve( - that, - progress.data.Session.SUCCESS, - info - ); - } else { - if (xhr.status === 401) { - cbresult = progress.data.AuthenticationProvider._getAuthFailureReason(xhr); + try { + if (xhr.readyState === 4) { + info = { + xhr: xhr, + offlineReason: undefined, + fireEventIfOfflineChange: true, + usingOepingFormat: false + }; + + // call _processPingResult because it has logic for + // detecting change in online/offline state + _pdsession._processPingResult(info); + + if (xhr.status >= 200 && xhr.status < 300) { + deferred.resolve( + that, + progress.data.Session.SUCCESS, + info + ); } else { - cbresult = progress.data.Session.GENERAL_FAILURE; + if (xhr.status === 401) { + cbresult = progress.data.AuthenticationProvider._getAuthFailureReason(xhr); + } else { + cbresult = progress.data.Session.GENERAL_FAILURE; + } + deferred.reject(that, cbresult, info); } - deferred.reject(that, cbresult, info); } - } + } catch (e) { + } }; try { @@ -13458,8 +13532,8 @@ limitations under the License. progress.data.getSession = function (options) { var deferred = new progress.util.Deferred(), authProvider, - promise, - authProviderInitObject = {}; + authProviderInitObject = {}, + session; // This is the reject handler for session-related operations // login, addCatalog, and logout @@ -13487,26 +13561,23 @@ limitations under the License. } function loginHandler(object) { - var jsdosession; + let jsdosession; try { - jsdosession = new progress.data.JSDOSession(options); - try { - jsdosession.isAuthorized() - .then(function() { - return jsdosession.addCatalog(options.catalogURI); - }, sessionRejectHandler) - .then(function (object, result, info) { - object = progress.util.Deferred.getParamObject(object, result, info); - deferred.resolve(object.jsdosession, progress.data.Session.SUCCESS); - }, sessionRejectHandler); - } catch (e) { - sessionRejectHandler( - jsdosession, - progress.data.Session.GENERAL_FAILURE, - {errorObject: e} - ); + if (typeof session === "undefined") { + jsdosession = new progress.data.JSDOSession(options); + } else { + jsdosession = session; } + + jsdosession.isAuthorized() + .then(function() { + return jsdosession.addCatalog(options.catalogURI); + }, sessionRejectHandler) + .then(function (object, result, info) { + object = progress.util.Deferred.getParamObject(object, result, info); + deferred.resolve(object.jsdosession, progress.data.Session.SUCCESS); + }, sessionRejectHandler); } catch (ex) { sessionRejectHandler( jsdosession, @@ -13632,7 +13703,33 @@ limitations under the License. options.authProvider = authProvider; if (authProvider.hasClientCredentials()) { - loginHandler(authProvider); + // FAKE SESSION + let jsdosession = new progress.data.JSDOSession(options), + statusCode = 0; + + // This is a band-aid. We need to refactor and re-modularize + // getSession() now that the team has a better understanding + // of async operations --aestrada + jsdosession.isAuthorized().then(() => { + session = jsdosession; + return; + }, (obj) => { + statusCode = obj && obj.info && obj.info.xhr && obj.info.xhr.status; + return progress.util.Deferred.when([ + jsdosession.invalidate(), + options.authProvider.logout() + ]); + }).then(() => { + // If we have a 401, then we need to get rid of our old authProvider and try a fresh start + // Otherwise, we still good. + if (statusCode === 401) { + authProvider = new progress.data.AuthenticationProvider(authProviderInitObject); + options.authProvider = authProvider; + callLogin(authProvider); + } else { + loginHandler(authProvider); + } + }); } else { // If model is anon, just log in. if (authProvider.authenticationModel === progress.data.Session.AUTH_TYPE_ANON) { @@ -13699,12 +13796,10 @@ limitations under the License. if (typeof exports !== "undefined") { exports.progress = progress; } - //# sourceURL=progress.jsdo.js /* -progress.auth.js Version: 6.0.1 -Copyright (c) 2016-2017 Progress Software Corporation and/or its subsidiaries or affiliates. +Copyright (c) 2016-2019 Progress Software Corporation and/or its subsidiaries or affiliates. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -13791,6 +13886,9 @@ limitations under the License. case progress.data.Session.AUTH_TYPE_FORM_SSO: authProv = new progress.data.AuthenticationProviderSSO(initObject.uri); break; + case progress.data.Session.AUTH_TYPE_BEARER: + authProv = new progress.data.AuthenticationProviderBearer(initObject.uri); + break; default: // AuthenticationProvider: The 'init-object' parameter passed to the 'constructor' function // has an invalid value for the 'authenticationModel' property. @@ -13832,7 +13930,10 @@ limitations under the License. xhr.onreadystatechange = function () { if (xhr.readyState === 4) { // process the response from the Web application - that._processLoginResult(xhr, deferred); + try { + that._processLoginResult(xhr, deferred); + } catch (e) { + } } }; @@ -14173,9 +14274,8 @@ limitations under the License. //# sourceURL=progress.jsdo.js /* -progress.auth.basic.js Version: 6.0.1 -Copyright (c) 2016-2017 Progress Software Corporation and/or its subsidiaries or affiliates. +Copyright (c) 2016-2019 Progress Software Corporation and/or its subsidiaries or affiliates. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14332,9 +14432,154 @@ limitations under the License. }()); //# sourceURL=progress.jsdo.js /* -progress.auth.form.js Version: 6.0.1 -Copyright (c) 2016-2018 Progress Software Corporation and/or its subsidiaries or affiliates. + +Copyright (c) 2017-2019 Progress Software Corporation and/or its subsidiaries or affiliates. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + + */ + +(function () { + + "use strict"; // note that this makes JSLint complain if you use arguments[x] + + /*global progress : true*/ + /*global storage, XMLHttpRequest, msg, btoa*/ + + progress.data.AuthenticationProviderBearer = function (uri) { + var bearerToken = null, + fn; + + // process constructor arguments, etc. + this._initialize(uri, progress.data.Session.AUTH_TYPE_BEARER, + {"_loginURI": progress.data.AuthenticationProvider._homeLoginURIBase}); + + // PRIVATE FUNCTIONS + + function make_Bearer_auth_header(token) { + return "Bearer " + token; + } + + // "INTERNAL" METHODS + // Override the protoype's method but call it from within the override + // (Define the override here in the constructor so it has access to instance variables) + this._reset = function () { + bearerToken = null; + progress.data.AuthenticationProviderBearer.prototype._reset.apply(this); + }; + + // Override the protoype's method (this method does not invoke the prototype's copy) + // (Define the override here in the constructor so it has access to instance variables) + this._openLoginRequest = function (xhr, uri) { + var auth; + + xhr.open("GET", uri, true); // but see comments below inside the "if bearerToken" + // may have to go with that approach + + if (bearerToken) { + + // set Authorization header + auth = make_Bearer_auth_header(bearerToken); + xhr.setRequestHeader('Authorization', auth); + } + + progress.data.Session._setNoCacheHeaders(xhr); + }; + + // Override the protoype's method but call it from within the override + // (Define the override here in the constructor so it has access to instance variables) + this._processLoginResult = function _Bearer_processLoginResult(xhr, deferred) { + progress.data.AuthenticationProviderBearer.prototype._processLoginResult.apply( + this, + [xhr, deferred] + ); + if (!this._loggedIn) { + // login failed, clear the credentials + bearerToken = null; + } + }; + + // Override the protoype's method (this method does not invoke the prototype's copy, but + // calls a prototype general-purpose login method) + // (Define the override here in the constructor so it has access to instance variables) + this.login = function (token) { + // these throw if the check fails (may want to do something more elegant) + this._checkStringArg("login", token, 1, "token"); + + bearerToken = token; + return this._loginProto(); + }; + + // Override the protoype's method (this method does not invoke the prototype's copy) + // (Define the override here in the constructor so it has access to instance variables) + // TODO: This method uses a callback, primarily to avoid breaking tdriver tests. We should change + // it to use promises + this._openRequestAndAuthorize = function (xhr, verb, uri, async, callback) { + var auth, + errorObject; + + if (this.hasClientCredentials()) { + + xhr.open(verb, uri, async); // but see comments below inside the "if bearerToken" + // may have to go with that approach + + if (bearerToken) { + + // set Authorization header + auth = make_Bearer_auth_header(bearerToken); + xhr.setRequestHeader('Authorization', auth); + } + + progress.data.Session._setNoCacheHeaders(xhr); + } else { + // AuthenticationProvider: The AuthenticationProvider is not managing valid credentials. + errorObject = new Error(progress.data._getMsgText("jsdoMSG125", "AuthenticationProvider")); + } + + callback(errorObject); + }; + }; + + + // Give this constructor the prototype from the "base" AuthenticationProvider + // Do this indirectly by way of an intermediate object so changes to the prototype ("method overrides") + // don't affect other types of AuthenticationProviders that use the prototype) + function BearerProxy() {} + BearerProxy.prototype = progress.data.AuthenticationProvider.prototype; + progress.data.AuthenticationProviderBearer.prototype = new BearerProxy(); + + // Reset the prototype's constructor property so it points to AuthenticationProviderForm rather than + // the one that it just inherited (this is pretty much irrelevant though - the correct constructor + // will get called regardless) + progress.data.AuthenticationProviderBearer.prototype.constructor = + progress.data.AuthenticationProviderBearer; + + + // OVERRIDE METHODS ON PROTOTYPE IF NECESSARY AND POSSIBLE + // (SOME METHODS ARE OVERRIDDEN IN THE CONSTRUCTOR BECAUSE THEY NEED ACCESS TO INSTANCE VARIABLES) + + // NOTE: There are no overrides of the following methods (either here or in the constructor). + // This object uses these methods from the original prototype(i.e., the implementations from the + // AuthenticationProvider object): + // logout (API method) + // hasClientCredentials (API method) + +}()); +//# sourceURL=progress.jsdo.js +/* + +Copyright (c) 2016-2019 Progress Software Corporation and/or its subsidiaries or affiliates. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14451,7 +14696,10 @@ limitations under the License. xhr.onreadystatechange = function () { if (xhr.readyState === 4) { // process the response from the Web application - that._processLogoutResult(xhr, deferred); + try { + that._processLogoutResult(xhr, deferred); + } catch (e) { + } } }; @@ -14544,9 +14792,8 @@ limitations under the License. }()); //# sourceURL=progress.jsdo.js /* -progress.auth.sso.js Version: 6.0.1 -Copyright (c) 2016-2017 Progress Software Corporation and/or its subsidiaries or affiliates. +Copyright (c) 2016-2019 Progress Software Corporation and/or its subsidiaries or affiliates. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14903,7 +15150,10 @@ limitations under the License. xhr.onreadystatechange = function () { if (xhr.readyState === 4) { // process the response from the Web application - processRefreshResult(xhr, deferred); + try { + processRefreshResult(xhr, deferred); + } catch (e){ + } } }; diff --git a/lib/progress.jsdo.min.js b/lib/progress.jsdo.min.js index fc0f831..5129200 100644 --- a/lib/progress.jsdo.min.js +++ b/lib/progress.jsdo.min.js @@ -1,7 +1,5 @@ /* -Progress JSDO Version: 6.0.1 - -Copyright 2012-2018 Progress Software Corporation and/or its subsidiaries or affiliates. +Copyright 2012-2019 Progress Software Corporation and/or its subsidiaries or affiliates. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -15,5 +13,5 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -(function(){var isNativeScript=false,isNodeJS=false;var pkg_xmlhttprequest="xmlhttprequest",pkg_nodeLocalstorage="node-localstorage",pkg_nativescriptLocalstorage="nativescript-localstorage",pkg_fileSystemAccess="file-system/file-system-access",pkg_base64="base-64";if(typeof XMLHttpRequest==="undefined"){isNodeJS=true;try{XMLHttpRequest=require(""+pkg_xmlhttprequest).XMLHttpRequest}catch(e){console.error("Error: JSDO library requires XMLHttpRequest object in Node.js.\n"+"Please install xmlhttprequest package.")}}if(!isNodeJS&&(typeof localStorage==="undefined"||typeof sessionStorage==="undefined")){try{require(""+pkg_fileSystemAccess);isNativeScript=true}catch(exception1){isNativeScript=false}}if(isNativeScript){try{if(typeof sessionStorage==="undefined"){sessionStorage=require(""+pkg_nativescriptLocalstorage)}if(typeof localStorage==="undefined"){localStorage=require(""+pkg_nativescriptLocalstorage)}}catch(exception2){console.error("Error: JSDO library requires localStorage and sessionStorage objects in NativeScript.\n"+"Please install nativescript-localstorage package.")}try{if(typeof btoa==="undefined"){btoa=require(""+pkg_base64).encode}}catch(exception3){console.error("Error: JSDO library requires btoa() function in NativeScript.\n"+"Please install base-64 package.")}}if(isNodeJS){var LocalStorage;if(typeof localStorage==="undefined"){try{var module=require(""+pkg_nodeLocalstorage);LocalStorage=module.LocalStorage;localStorage=new LocalStorage("./scratch1")}catch(e){console.error("Error: JSDO library requires localStorage and sessionStorage objects in Node.js.\n"+"Please install node-localstorage package.")}}if(typeof sessionStorage==="undefined"&&typeof LocalStorage!=="undefined"){sessionStorage=new LocalStorage("./scratch2")}try{if(typeof btoa==="undefined"){btoa=require(""+pkg_base64).encode}}catch(exception3){console.error("Error: JSDO library requires btoa() function in Node.js.\n"+"Please install base-64 package.")}}})();(function(){if(typeof progress==="undefined"){progress={}}if(typeof progress.data==="undefined"){progress.data={}}progress.util={};var STRING_OBJECT_TYPE="String",DATE_OBJECT_TYPE="Date",CHARACTER_ABL_TYPE="CHARACTER";progress.util.Deferred=function(){function Deferred(){this._deferred={}}Deferred.prototype.promise=function(){var that=this;if(progress.util.Deferred.useJQueryPromises){if(typeof $!=="undefined"&&typeof $.Deferred==="function"){this._deferred._jQuerydeferred=$.Deferred();this._promise=this._deferred._jQuerydeferred.promise()}else{throw new Error("JQuery Promises not found in environment.")}}else{this._promise=new Promise(function(resolve,reject){that._deferred.resolve=resolve;that._deferred.reject=reject})}if(this._resolveArguments||this._rejectArguments){setTimeout(function(){if(that._resolveArguments){that.resolve.apply(that,that._resolveArguments)}else if(that._rejectArguments){that.reject.apply(that,that._rejectArguments)}},500)}return this._promise};Deferred.prototype.resolve=function(arg1,arg2,arg3){if(this._promise){if(this._deferred._jQuerydeferred){this._deferred._jQuerydeferred.resolve.apply(this,arguments)}else{var object=progress.util.Deferred.getParamObject1(arg1,arg2,arg3);this._deferred.resolve(object)}}else{this._resolveArguments=arguments}};Deferred.prototype.reject=function(arg1,arg2,arg3){if(this._promise){if(this._deferred._jQuerydeferred){this._deferred._jQuerydeferred.reject.apply(this,arguments)}else{var object=progress.util.Deferred.getParamObject1(arg1,arg2,arg3);this._deferred.reject(object)}}else{this._rejectArguments=arguments}};Deferred.useJQueryPromises=false;Deferred.when=function(deferreds){if(progress.util.Deferred.useJQueryPromises){return $.when.apply($,deferreds)}else{return Promise.all(deferreds)}};Deferred.getParamObject1=function(arg1,arg2,arg3){var object={},objectName;try{if(typeof arg1==="undefined"||arg1===null){object.result=arg2;object.info=arg3}else{if(arg1 instanceof progress.data.JSDOSession){objectName="jsdosession"}else if(arg1 instanceof progress.data.AuthenticationProvider){objectName="provider"}else if(arg1 instanceof progress.data.JSDO){objectName="jsdo"}else if(typeof arg1==="number"){objectName="result"}else{objectName=typeof arg1}object[objectName]=arg1;if(objectName==="jsdo"){object.success=arg2;if(arg3&&arg3.xhr){object.request=arg3}else if(arg3&&arg3.batch){object.request=arg3}else{object.info=arg3}}else{if(objectName==="result"){object.info=arg2;if(arg3){object.info2=arg3}}else{object.result=arg2;object.info=arg3}}}}catch(e){console.log("Error: Undetermined argument in getParamObject() call.")}return object};Deferred.getParamObject=function(arg1,arg2,arg3){var object={};if(progress.util.Deferred.useJQueryPromises){object=progress.util.Deferred.getParamObject1(arg1,arg2,arg3)}else{if(typeof arg1==="undefined"){object.result=arg2;object.info=arg3;arg1=object}return arg1}return object};return Deferred}();progress.util.Observable=function(){function _filterObservers(observers,fn,scope,operation){return observers.filter(function(el){if(el.fn!==fn||el.scope!==scope||el.operation!==operation){return el}},this)}this.validateSubscribe=function(args,evt,listenerData){if(args.length>=2&&typeof args[0]==="string"&&typeof args[1]==="string"){listenerData.operation=args[1];listenerData.fn=args[2];listenerData.scope=args[3]}else if(args.length>=2&&typeof args[0]==="string"&&typeof args[1]==="function"){listenerData.operation=undefined;listenerData.scope=args[2];listenerData.fn=args[1]}else{throw new Error}};this.subscribe=function(evt,operation,fn,scope){var listenerData,observers;if(!evt){throw new Error(progress.data._getMsgText("jsdoMSG037",this.toString(),"subscribe"))}if(typeof evt!=="string"){throw new Error(progress.data._getMsgText("jsdoMSG033",this.toString(),"subscribe",progress.data._getMsgText("jsdoMSG039")))}this._events=this._events||{};evt=evt.toLowerCase();listenerData={fn:undefined,scope:undefined,operation:undefined};try{this.validateSubscribe(arguments,evt,listenerData)}catch(e){throw new Error(progress.data._getMsgText("jsdoMSG033",this.toString(),"subscribe",e.message))}observers=this._events[evt]||[];observers=_filterObservers(observers,listenerData.fn,listenerData.scope,listenerData.operation);observers.push(listenerData);this._events[evt]=observers;return this};this.unsubscribe=function(evt,operation,fn,scope){var listenerData,observers;if(!evt){throw new Error(progress.data._getMsgText("jsdoMSG037",this.toString(),"unsubscribe"))}if(typeof evt!=="string"){throw new Error(progress.data._getMsgText("jsdoMSG033",this.toString(),"unsubscribe",progress.data._getMsgText("jsdoMSG037")))}this._events=this._events||{};evt=evt.toLowerCase();listenerData={fn:undefined,scope:undefined,operation:undefined};try{this.validateSubscribe(arguments,evt,listenerData)}catch(e){throw new Error(progress.data._getMsgText("jsdoMSG033",this.toString(),"unsubscribe",e.message))}observers=this._events[evt]||[];if(observers.length>0){this._events[evt]=_filterObservers(observers,listenerData.fn,listenerData.scope,listenerData.operation)}return this};this.trigger=function(evt,operation,args){var observers,op;if(!evt){throw new Error(progress.data._getMsgText("jsdoMSG037",this.toString(),"trigger"))}this._events=this._events||{};evt=evt.toLowerCase();observers=this._events[evt]||[];if(observers.length>0){args=Array.prototype.slice.call(arguments);if(arguments.length>=2&&typeof evt==="string"&&typeof operation==="string"){op=operation;args=args.length>2?args.slice(2):[]}else if(arguments.length>=1&&typeof evt==="string"){op=undefined;args=args.length>1?args.slice(1):[]}else{throw new Error(progress.data._getMsgText("jsdoMSG033",this.toString(),"trigger"))}observers.forEach(function(el){if(el.operation===op){el.fn.apply(el.scope,args)}})}return this};this.unsubscribeAll=function(evt,operation){var observers;if(evt){this._events=this._events||{};if(typeof evt==="string"){evt=evt.toLowerCase();observers=this._events[evt]||[];observers.forEach(function(el){if(el.operation){this.unsubscribe(evt,el.operation,el.fn,el.scope)}else{this.unsubscribe(evt,el.fn,el.scope)}},this)}}else{this._events={}}return this}};progress.data.LocalStorage=function LocalStorage(){if(typeof localStorage==="undefined"){throw new Error(progress.data._getMsgText("jsdoMSG126","progress.data.LocalStorage","localStorage"))}this.saveToLocalStorage=function(name,dataObj){localStorage.setItem(name,JSON.stringify(dataObj))};this.readFromLocalStorage=function(name){var jsonStr=localStorage.getItem(name),dataObj=null;if(jsonStr!==null){try{dataObj=JSON.parse(jsonStr)}catch(e){dataObj=null}}return dataObj};this.clearLocalStorage=function(name){localStorage.removeItem(name)}};progress.util._convertToABLWhereString=function(tableRef,filter){var result=[],logic=filter.logic||"and",idx,length,field,fieldInfo,type,format,operator,value,ablType,filters=filter.filters||[filter],whereOperators={eq:"=",neq:"<>",gt:">",gte:">=",lt:"<",lte:"<=",contains:"INDEX",doesnotcontain:"INDEX",endswith:"R-INDEX",startswith:"BEGINS",isnull:"ISNULL",isnotnull:"ISNOTNULL",isempty:"ISEMPTY",isnotempty:"ISNOTEMPTY"};for(idx=0,length=filters.length;idx 0"}else{format="{2} MATCHES '*{1}'"}}else{format="{2} {0} "+format}filter=progress.util._format(format,operator,value,field)}else if(operator&&value===undefined){if(filter.operator==="isempty"||filter.operator==="isnotempty"){ablType=tableRef._getABLType(field);if(ablType!==CHARACTER_ABL_TYPE){throw new Error("Error parsing filter object. The operator "+filter.operator+" requires a CHARACTER field")}if(filter.operator==="isempty"){format="{2} = ''"}else if(filter.operator==="isnotempty"){format="{2} <> ''"}}else{if(filter.operator==="isnull"){format="{2} = ?"}else if(filter.operator==="isnotnull"){format="{2} <> ?"}else{format="{2} {0} ?"}}filter=progress.util._format(format,operator,value,field)}}result.push(filter)}filter=result.join(" "+logic+" ");if(result.length>1){filter="("+filter+")"}return filter};progress.util._convertToSQLQueryString=function(tableRef,filter,addSelect){var result=[],logic=filter.logic||"and",idx,length,field,type,format,operator,value,fieldFormat,filters=filter.filters||[filter],filterStr,usingLike=true,whereOperators={eq:"=",neq:"!=",gt:">",gte:">=",lt:"<",lte:"<=",contains:"LIKE",doesnotcontain:"NOT LIKE",endswith:"LIKE",startswith:"LIKE",isnull:"ISNULL",isnotnull:"ISNOTNULL",isempty:"ISEMPTY",isnotempty:"ISNOTEMPTY"};if(typeof addSelect==="undefined"){addSelect=false}for(idx=0,length=filters.length;idx1){filterStr="("+filterStr+")"}if(addSelect===true){filterStr="SELECT * FROM "+tableRef._name+" WHERE "+filterStr}return filterStr};progress.util._getObjectType=function(value){return Object.prototype.toString.call(value).slice(8,-1)};progress.util._format=function(fmt){var values=arguments,formatRegExp=/\{(\d+)(:[^\}]+)?\}/g;return fmt.replace(formatRegExp,function(match,index,placeholderFormat){var value=values[parseInt(index,10)+1];return progress.util._toString(value,placeholderFormat?placeholderFormat.substring(1):"")})};progress.util._toString=function(value,fmt){var str;if(fmt){if(progress.util._getObjectType(value)==="Date"){return progress.util._formatDate(value,fmt)}}if(typeof value==="number"){str=value.toString()}else{str=value!==undefined?value:""}return str};progress.util._pad=function(number,digits){var zeros=["","0","00","000","0000"],end;number=String(number);digits=digits||2;end=digits-number.length;if(end){return zeros[digits].substring(0,end)+number}return number};progress.util._formatDate=function(date,format){var dateFormatRegExp=/dd|MM|yyyy|hh|mm|fff|FFF|ss|zzz|iso|"[^"]*"|'[^']*'/g;return format.replace(dateFormatRegExp,function(match){var minutes,result,sign;if(match==="dd"){result=progress.util._pad(date.getDate())}else if(match==="MM"){result=progress.util._pad(date.getMonth()+1)}else if(match==="yyyy"){result=progress.util._pad(date.getFullYear(),4)}else if(match==="hh"){result=progress.util._pad(date.getHours())}else if(match==="mm"){result=progress.util._pad(date.getMinutes())}else if(match==="ss"){result=progress.util._pad(date.getSeconds())}else if(match==="fff"){result=progress.util._pad(date.getMilliseconds(),3)}else if(match==="FFF"){result=String(date.getTime())}else if(match==="zzz"){minutes=date.getTimezoneOffset();sign=minutes<0;result=(sign?"+":"-")+minutes}else if(match==="iso"){result=date.toISOString()}return result!==undefined?result:match.slice(1,match.length-1)})};progress.util.jsdoSettingsProcessor=function jsdoSettingsProcessor(jsdoSettings){if(typeof jsdoSettings==="object"){if(jsdoSettings.authenticationModel===undefined||jsdoSettings.authenticationModel===""){jsdoSettings.authenticationModel="ANONYMOUS"}}}})();(function(){var PROGRESS_JSDO_PCT_MAX_EMPTY_BLOCKS=20,PROGRESS_JSDO_OP_STRING=["none","create","read","update","delete","submit"],PROGRESS_JSDO_ROW_STATE_STRING=["","created","","modified","deleted"];if(typeof progress==="undefined"){progress={}}if(typeof progress.data==="undefined"){progress.data={}}progress.data._nextid=0;progress.data._uidprefix=""+(Date.now?Date.now():(new Date).getTime());var UID_MAX_VALUE=999999999999999;progress.data._getNextId=function(){var uid=++progress.data._nextid;if(uid>=UID_MAX_VALUE){progress.data._nextid=uid=1;progress.data._uidprefix=""+(Date.now?Date.now():(new Date).getTime())}return progress.data._uidprefix+"-"+uid};var msg={};msg.msgs={};msg.msgs.jsdoMSG000="JSDO, Internal Error: {1}";msg.msgs.jsdoMSG001="JSDO: JSDO has multiple tables. Please use {1} at the table reference level.";msg.msgs.jsdoMSG002="JSDO: Working record for '{1}' is undefined.";msg.msgs.jsdoMSG003="JSDO: {1} function requires a function as a parameter.";msg.msgs.jsdoMSG004="JSDO: Unable to find resource '{1}' in the catalog.";msg.msgs.jsdoMSG005="JSDO: Data for table '{1}' was not specified in addRecords() call.";msg.msgs.jsdoMSG006="JSDO: Data for JSDO was not specified in addRecords() call.";msg.msgs.jsdoMSG007="JSDO: Test function in {1} must return a boolean.";msg.msgs.jsdoMSG008="JSDO: Invalid keyFields parameter in addRecords() call.";msg.msgs.jsdoMSG009="JSDO: KeyField '{1}' in addRecords() call was not found in the schema.";msg.msgs.jsdoMSG010="JSDO: Field '{1}' in relationship was not found in the schema.";msg.msgs.jsdoMSG011="UIHelper: JSDO has multiple tables. "+"Please use {1} at the table reference level.";msg.msgs.jsdoMSG012="UIHelper: Invalid {2} parameter in {1} call.";msg.msgs.jsdoMSG020="JSDO: tableName parameter must be a string in addRecords() call.";msg.msgs.jsdoMSG021="JSDO: addMode parameter must be specified in addRecords() call.";msg.msgs.jsdoMSG022="JSDO: Invalid addMode specified in addRecords() call.";msg.msgs.jsdoMSG023="JSDO: Duplicate found in addRecords() call using APPEND mode.";msg.msgs.jsdoMSG024="{1}: Unexpected signature in call to {2} function.";msg.msgs.jsdoMSG025="{1}: Invalid parameters in call to {2} function.";msg.msgs.jsdoMSG026="JSDO: saveChanges requires a "+"CREATE, UPDATE, DELETE or SUBMIT operation to be defined.";msg.msgs.jsdoMSG030="JSDO: Invalid {1}, expected {2}.";msg.msgs.jsdoMSG031="JSDO: Specified sort field name '{1}' was not found in the schema.";msg.msgs.jsdoMSG032="JSDO: Before-image data already exists for record in addRecords() call.";msg.msgs.jsdoMSG033="{1}: Invalid signature for {2}. {3}";msg.msgs.jsdoMSG034="JSDO: In '{1}' function, JSON data is missing _id";msg.msgs.jsdoMSG035="JSDO: In '{1}' function, before-image JSON data is missing prods:clientId";msg.msgs.jsdoMSG036="JSDO: '{1}' can only be called for a dataset";msg.msgs.jsdoMSG037="{1}: Event name must be provided for {2}.";msg.msgs.jsdoMSG038="Too few arguments. There must be at least {1}.";msg.msgs.jsdoMSG039="The name of the event is not a string.";msg.msgs.jsdoMSG040="The event listener is not a function.";msg.msgs.jsdoMSG041="The event listener scope is not an object.";msg.msgs.jsdoMSG042="'{1}' is not a defined event for this object.";msg.msgs.jsdoMSG043="{1}: A session object was requested to check the status of a Mobile "+"Service named '{2}', but it has not loaded the definition of that service.";msg.msgs.jsdoMSG044="JSDO: In '{1}' function, {2} is missing {3} property.";msg.msgs.jsdoMSG045="JSDO: {1} function: {2} is missing {3} property.";msg.msgs.jsdoMSG046="JSDO: {1} operation is not defined.";msg.msgs.jsdoMSG047="{1} timeout expired.";msg.msgs.jsdoMSG048="{1}: {2} method has argument '{3}' that is missing property '{4}'.";msg.msgs.jsdoMSG049="{1}: Unexpected error calling {2}: {3}";msg.msgs.jsdoMSG050="No token returned from server";msg.msgs.jsdoMSG051="{1} The login method was not executed because the AuthenticationProvider is already logged in.";msg.msgs.jsdoMSG052="{1}: The login method was not executed because no credentials were supplied.";msg.msgs.jsdoMSG053="{1}: {2} was not executed because the AuthenticationProvider is not logged in.";msg.msgs.jsdoMSG054="{1}: Token refresh was not executed because the AuthenticationProvider does not have a refresh token.";msg.msgs.jsdoMSG055="{1}: Token refresh was not executed because the authentication model is not sso.";msg.msgs.jsdoMSG056="{1}: Already logged in.";msg.msgs.jsdoMSG057="{1}: Cannot call {2} when authenticationModel is SSO. Please use the AuthenticationProvider object instead.";msg.msgs.jsdoMSG058="{1}: Cannot pass username and password to addCatalog when authenticationModel "+"is sso. Pass an AuthenticationProvider instead.";msg.msgs.jsdoMSG059="{1}: Error in constructor. The authenticationModels of the "+"AuthenticationProvider ({2}) and the JSDOSession ({3}) were not compatible.";msg.msgs.jsdoMSG060="AuthenticationProvider: AuthenticationProvider is no longer logged in. "+"Tried to refresh SSO token but failed due to authentication error at token server.";msg.msgs.jsdoMSG061="{1}: Attempted to set {2} property to an invalid value.";msg.msgs.jsdoMSG062="{1}: Cannot call {2} when an AuthenticationProvider is already available and logged in.";msg.msgs.jsdoMSG100="JSDO: Unexpected HTTP response. Too many records.";msg.msgs.jsdoMSG101="Network error while executing HTTP request.";msg.msgs.jsdoMSG110="Catalog error: idProperty not specified for resource '{1}'. "+"idProperty is required {2}.";msg.msgs.jsdoMSG111="Catalog error: Schema '{1}' was not found in catalog.";msg.msgs.jsdoMSG112="Catalog error: Output parameter '{1}' was not found for operation '{2}'.";msg.msgs.jsdoMSG113="Catalog error: Found xType '{1}' for output parameter '{2}' "+"for operation '{3}' but xType DATASET, TABLE or ARRAY was expected.";msg.msgs.jsdoMSG114="JSDO: idProperty '{1}' is missing from '{2}' record.";msg.msgs.jsdoMSG115="JSDO: Invalid option specified in {1}() call.";msg.msgs.jsdoMSG116="JSDO: {1} parameter must be a string in {2} call.";msg.msgs.jsdoMSG117="JSDO: Schema from storage area '{1}' does not match JSDO schema";msg.msgs.jsdoMSG118="JSDO: Plugin '{1}' was not found.";msg.msgs.jsdoMSG119="JSDO: A mappingType is expected when 'capabilities' is set."+" Please specify a plugin (ex: JFP).";msg.msgs.jsdoMSG120="JSDO: Parameter '{2}' requires capability '{1}' in the catalog.";msg.msgs.jsdoMSG121="{1}: Argument {2} must be of type {3} in {4} call.";msg.msgs.jsdoMSG122="{1}: Incorrect number of arguments in {2} call. There should be {3}.";msg.msgs.jsdoMSG123="{1}: A server response included an invalid '{2}' header.";msg.msgs.jsdoMSG124="JSDO: autoApplyChanges is not supported for saveChanges(true) "+"with a temp-table. Use jsdo.autoApplyChanges = false.";msg.msgs.jsdoMSG125="{1}: The AuthenticationProvider is not managing valid credentials.";msg.msgs.jsdoMSG126="{1}: No support for {2}.";msg.msgs.jsdoMSG127="JSDO: acceptRowChanges() cannot be called for record with _rejected === true.";msg.msgs.jsdoMSG500="{1}: '{2}' objects must contain a '{3}' property.";msg.msgs.jsdoMSG501="{1}: '{2}' in '{3}' function cannot be an empty string.";msg.msgs.jsdoMSG502="{1}: The '{2}' parameter passed to the '{3}' function has an invalid value for "+"its '{4}' property.";msg.msgs.jsdoMSG503="{1}: '{2}' must be of type '{3}'.";msg.msgs.jsdoMSG504="{1}: {2} has an invalid value for the '{3}' property.";msg.msgs.jsdoMSG505="{1}: '{2}' objects must have a '{3}' method.";msg.msgs.jsdoMSG506="{1}: Invalid argument for the {2} parameter in {3} call.";msg.msgs.jsdoMSG507="{1}: '{2}' is an invalid value for the {3} parameter in {4} call.";msg.msgs.jsdoMSG508="JSDOSession: If a JSDOSession object is using the SSO authentication model, "+"the options object passed to its constructor must include an authProvider property.";msg.msgs.jsdoMSG509="progress.data.getSession: If the authenticationModel is AUTH_TYPE_SSO, "+"authenticationURI and authProviderAuthenticationModel are required parameters.";msg.msgs.jsdoMSG510="{1}: This session has been invalidated and cannot be used.";msg.msgs.jsdoMSG511="JSDOSession: addCatalog() can only be called if an AuthenticationProvider was passed as an argument or "+"connect() has been successfully called.";msg.msgs.jsdoMSG512="JSDOSession: Error while loading multiple catalogs.";msg.msgs.jsdoMSG998="JSDO: JSON object in addRecords() must be DataSet or Temp-Table data.";msg.getMsgText=function(n,args){var text=msg.msgs[n],i;if(!text){throw new Error("Message text was not found by getMsgText()")}for(i=1;i=PROGRESS_JSDO_PCT_MAX_EMPTY_BLOCKS)this._needCompaction=true;data=newDataArray}else{if(params&&(params.sort||params.top)){newDataArray=[];for(i=0;i0){sortObject.tableRef=this;data.sort(this._getCompareFn(sortObject))}}if(params.top){if(typeof params.skip=="undefined"){params.skip=0}data=data.splice(params.skip,params.top)}}return data};this._recToDataObject=function(record,includeChildren){var array=[record];var dataObject=array;if(typeof includeChildren=="undefined"){includeChildren=false}if(this._jsdo._dataSetName){dataObject={};dataObject[this._jsdo._dataSetName]={};dataObject[this._jsdo._dataSetName][this._name]=array;if(includeChildren&&this._children.length>0){var jsrecord=this._findById(record._id,false);if(jsrecord){for(var i=0;i0){for(var j=0;j0){for(var i=0;i=PROGRESS_JSDO_PCT_MAX_EMPTY_BLOCKS)this._needCompaction=true};this._equalRecord=function(rec1,rec2,keyFields){var field;var match=true;for(var i=0;ivalue2||(value1===undefined||value1===null))return sortAscending[i]?1:-1;else if(value10)this._sort(sortObject)}else{this._sort(arg1)}this._createIndex()};this._sort=function(arg1){if(arguments.length===0&&(!this.autoSort||this._sortFn===undefined&&this._sortObject.sortFields===undefined))return;if(arguments.length===0){if(this._sortFn){this._data.sort(this._sortFn)}else{this._data.sort(this._compareFields)}this._needsAutoSorting=false}else{if(typeof arg1=="function"){this._data.sort(this._getCompareFn(arg1))}else{arg1.tableRef=this;this._data.sort(this._getCompareFn(arg1))}if(this.autoSort)this._needsAutoSorting=true}};this.addRecords=function(jsonObject,addMode,keyFields,trackChanges,isInvoke){this._jsdo._addRecords(this._name,jsonObject,addMode,keyFields,trackChanges,isInvoke)};this.acceptChanges=function(){var tableRef=this;for(var id in tableRef._beforeImage){if(tableRef._beforeImage[id]===null){var jsrecord=tableRef._findById(id,false);if(jsrecord!==null){tableRef._jsdo._deleteProdsProperties(jsrecord.data,true)}}else if(this._changed[id]!==undefined){var jsrecord=this._findById(id,false);if(jsrecord!==null){tableRef._jsdo._deleteProdsProperties(jsrecord.data,true)}}}tableRef._processed={};tableRef._added=[];tableRef._changed={};tableRef._deleted=[];tableRef._beforeImage={}};this.rejectChanges=function(){for(var id in this._beforeImage){if(this._beforeImage[id]===null){this._jsdo._undoCreate(this,id)}else if(this._changed[id]!==undefined){this._jsdo._undoUpdate(this,id,true)}else{this._jsdo._undoDelete(this,id,true)}}var tableRef=this;tableRef._processed={};tableRef._added=[];tableRef._changed={};tableRef._deleted=[]};this.hasChanges=function(){return Object.keys(this._beforeImage).length!==0};this.getChanges=function(){var result=[];for(var id in this._beforeImage){var item={rowState:"",record:null};if(this._beforeImage[id]===null){item.rowState=PROGRESS_JSDO_ROW_STATE_STRING[progress.data.JSDO._OP_CREATE];item.record=this._findById(id,false)}else if(this._changed[id]!==undefined){item.rowState=PROGRESS_JSDO_ROW_STATE_STRING[progress.data.JSDO._OP_UPDATE];item.record=this._findById(id,false)}else{item.rowState=PROGRESS_JSDO_ROW_STATE_STRING[progress.data.JSDO._OP_DELETE];item.record=new progress.data.JSRecord(this,this._beforeImage[id])}result.push(item)}return result};this._clearErrorStrings=function(){var record=null;for(var id in this._beforeImage){if(this._beforeImage[id]===null){record=this._findById(id,false);if(record){delete record.data._errorString}}else{record=this._findById(id,false);if(record){delete record.data._errorString}else{delete this._beforeImage[id]._errorString}}}};this._applyChanges=function(){var i;for(var id in this._beforeImage){if(this._beforeImage[id]===null){var jsrecord=this._findById(id,false);if(jsrecord===null&&this._jsdo._resource.idProperty!==undefined){if(this._tmpIndex[id]){var record=this._data[this._tmpIndex[id].index];jsrecord=record?new progress.data.JSRecord(this,record):null;delete this._tmpIndex[id]}}if(jsrecord!==null){if(jsrecord.data._rejected||jsrecord.data._errorString!==undefined){this._jsdo._undoCreate(this,id)}else{jsrecord.acceptRowChanges()}}else{var found=false;for(var i=0;i0){for(var i=0;iindex){i--}if(i!=index){this._tableRef._data.splice(index,1);this._tableRef._data.splice(i,0,record);this._tableRef._createIndex()}}}};this.assign=function(record){if(record===undefined)throw new Error(msg.getMsgText("jsdoMSG024","JSDO","assign() or update()"));this._saveBeforeImageUpdate();var fieldName,i,j,value,schema=this._tableRef.getSchema(),prefixElement,name;if(record){for(i=0;i0&&!this._fields[fieldName.toLowerCase()]){name=fieldName.substring(0,index);element=fieldName.substring(index+progress.data.JSDO.ARRAY_INDEX_SEPARATOR.length);fieldInfo=this._fields[name.toLowerCase()];if(!isNaN(element)&&fieldInfo&&fieldInfo.type==="array"){return this.record.data[name][element-1]}}return this.record.data[fieldName]}else return null},set:function(value){var name=fieldName,index,element,fieldInfo;if(this.record){this.record._saveBeforeImageUpdate();try{index=fieldName.indexOf(progress.data.JSDO.ARRAY_INDEX_SEPARATOR);if(index>0&&!this._fields[fieldName.toLowerCase()]){name=fieldName.substring(0,index);element=fieldName.substring(index+progress.data.JSDO.ARRAY_INDEX_SEPARATOR.length);fieldInfo=this._fields[name.toLowerCase()];if(!isNaN(element)&&fieldInfo&&fieldInfo.type==="array"){this.record.data[name][element-1]=value;return}}this.record.data[fieldName]=value}finally{this.record._sortRecord(name)}}},enumerable:true,writeable:true})};Object.defineProperty(this,"hasSubmitOperation",{get:function(){return this._hasSubmitOperation},enumerable:true});Object.defineProperty(this,"hasCUDOperations",{get:function(){return this._hasCUDOperations},enumerable:true});Object.defineProperty(this,"defaultTableRef",{get:function(){return this._defaultTableRef},enumerable:true});this._buffers={};this._numBuffers=0;this._defaultTableRef=null;this._async=true;this._dataProperty=null;this._dataSetName=null;this.operations=[];this.useRelationships=true;this._session=null;this._needCompaction=false;this._hasCUDOperations=false;this._hasSubmitOperation=false;this._useSubmit=false;this.autoApplyChanges=true;this._lastErrors=[];this._localStorage=null;this._convertForServer;this._fillMergeMode;var autoFill=false;if(!arguments[0]){throw new Error("JSDO: Parameters are required in constructor.")}if(typeof arguments[0]=="string"){this.name=arguments[0]}else if(typeof arguments[0]=="object"){var args=arguments[0];for(var v in args){switch(v){case"autoFill":autoFill=args[v];break;case"events":this._events={};for(var eventName in args[v]){this._events[eventName.toLowerCase()]=args[v][eventName]}break;case"dataProperty":this._dataProperty=args[v];break;default:this[v]=args[v]}}}if(!this.name){throw new Error("JSDO: JSDO constructor is missing the value for 'name'")}if(this._events){if(typeof this._events!=="object"){throw new Error("JSDO: JSDO constructor event object is not defined as an object")}for(var prop in this._events){var evt=this._events[prop];if(!(evt instanceof Array)){throw new Error("JSDO: JSDO constructor event object for "+prop+" must be an array")}evt.forEach(function(el){if(typeof el!=="object"){throw new Error("JSDO: JSDO constuctor event object for "+prop+" is not defined as an object")}if(typeof el.fn!=="function"){throw new Error("JSDO: JSDO event listener for "+prop+" is not a function.")}if(el.scope&&typeof el.scope!=="object"){throw new Error("JSDO: JSDO event listener scope for "+prop+" is not an object.")}})}}if(this.name){this._resource=progress.data.ServicesManager.getResource(this.name);if(this._resource){if(!this.url)this.url=this._resource.url;if(!this._dataSetName&&this._resource._dataSetName){this._dataSetName=this._resource._dataSetName;if(this._resource.dataProperty){var buffer=this[this._resource.dataProperty]=new progress.data.JSTableRef(this,this._resource.dataProperty);this._buffers[this._resource.dataProperty]=buffer}else{for(var tableName in this._resource.fields){var buffer=this[tableName]=new progress.data.JSTableRef(this,tableName);this._buffers[tableName]=buffer}}}if(!this._dataProperty&&this._resource.dataProperty)this._dataProperty=this._resource.dataProperty;if(!this._dataSetName){var tableName=this._dataProperty?this._dataProperty:"";this._buffers[tableName]=new progress.data.JSTableRef(this,tableName);if(tableName)this[tableName]=this._buffers[tableName]}var properties,tableName;if(this._dataSetName&&this._resource.schema&&this._resource.schema.properties[this._dataSetName]){properties=this._resource.schema.properties[this._dataSetName].properties;if(Object.keys(properties).length===1){tableName=Object.keys(properties)[0];if(properties[tableName].idProperty){this._resource.idProperty=properties[tableName].idProperty}}}else if(this._resource.schema&&this._resource.schema.properties&&this._resource.schema.properties[tableName]&&this._resource.schema.properties[tableName].idProperty){this._resource.idProperty=this._resource.schema.properties[tableName].idProperty}for(var fnName in this._resource.fn){this[fnName]=this._resource.fn[fnName]["function"]}this._hasCUDOperations=this._resource.generic["create"]!==undefined||this._resource.generic["update"]!==undefined||this._resource.generic["delete"]!==undefined;this._hasSubmitOperation=this._resource.generic["submit"]!==undefined;if(!this._session){var myservice=progress.data.ServicesManager.getService(this._resource.service.name);this._session=myservice._session;this._session._pushJSDOs(this)}}else{throw new Error(msg.getMsgText("jsdoMSG004",this.name))}}else{this._buffers[""]=new progress.data.JSTableRef(this,"")}if(!this._session){throw new Error("JSDO: Unable to get user session for resource '"+this.name+"'")}for(var buf in this._buffers){this._buffers[buf]._parent=null;this._buffers[buf]._children=[];this._buffers[buf]._relationship=null;this._buffers[buf]._isNested=false;if(!this._defaultTableRef)this._defaultTableRef=this._buffers[buf];this._numBuffers++}if(this._numBuffers!=1)this._defaultTableRef=null;else{this.record=null}if(typeof Object.defineProperty=="function"){this._caseSensitive=false;Object.defineProperty(this,"caseSensitive",{get:function(){return this._caseSensitive},set:function(value){this._caseSensitive=value?true:false;for(var buf in this._buffers){this._buffers[buf].caseSensitive=this._caseSensitive}},enumerable:true,writeable:true});this._autoSort=true;Object.defineProperty(this,"autoSort",{get:function(){return this._autoSort},set:function(value){this._autoSort=value?true:false;for(var buf in this._buffers){this._buffers[buf].autoSort=this._autoSort}},enumerable:true,writeable:true})}this._properties={};if(typeof Object.defineProperty=="function"){Object.defineProperty(this,"this._properties",{get:function(){return this._properties},enumerable:false})}if(this._resource&&this._resource.fields){for(var buf in this._buffers){this._buffers[buf]._schema=this._resource.fields[buf];this._buffers[buf]._primaryKeys=this._resource.primaryKeys[buf];this._buffers[buf]._fields={};var fields=this._buffers[buf]._schema;for(var i=0;i1){for(var buf in this._buffers){var fields=[];var found=false;for(var i=0;i=0?index+1:"");element.value=value?value[index]:undefined;return element};this.isDataSet=function(){return this._dataSetName?true:false};this._invokeComplete=function(jsdo,success,request){if(request.async&&request.fnName){jsdo.trigger("afterInvoke",request.fnName,jsdo,success,request)}if(request.deferred){if(success){request.deferred.resolve(jsdo,success,request)}else{request.deferred.reject(jsdo,success,request)}}};this._invokeSuccess=function(){};this._invokeError=function(){};this._httpRequest=function(xhr,method,url,reqBody,request){function afterOpenRequest(){var input=null;if(reqBody){xhr.setRequestHeader("Content-Type","application/json; charset=utf-8");input=JSON.stringify(reqBody)}try{xhr.send(input)}catch(e){request.success=false;request.exception=e;xhr.jsdo._session._checkServiceResponse(xhr,request.success,request)}}if(!xhr){xhr=new XMLHttpRequest;xhr.onCompleteFn=this._invokeComplete;xhr.onSuccessFn=this._invokeSuccess;xhr.onErrorFn=this._invokeError;xhr.onreadystatechange=this.onReadyStateChangeGeneric;if(request.async&&request.fnName){this.trigger("beforeInvoke",request.fnName,this,request)}if(reqBody){if(this._resource&&this._resource.service){var useRequest=this._resource.service.useRequest;if(this._resource.service.settings&&this._resource.service.settings.useRequest!==undefined){useRequest=this._resource.service.settings.useRequest}if(useRequest){reqBody={request:reqBody}}}}}xhr.request=request;xhr.jsdo=this;request.jsdo=this;request.xhr=xhr;this._session._openRequest(xhr,method,url,request.async,afterOpenRequest);return request};this._getDataObject=function(){var dataObject={};if(this._dataSetName){dataObject[this._dataSetName]={};var oldUseRelationships=this.useRelationships;try{this.useRelationships=false;for(var buf in this._buffers){dataObject[this._dataSetName][buf]=this._buffers[buf].getData()}}finally{this.useRelationships=oldUseRelationships}}else{if(this._dataProperty){dataObject[this._dataProperty]=this.getData()}else return this.getData()}return dataObject};this._getDataObjectAsNested=function(){var dataObject={};if(this._dataSetName){dataObject[this._dataSetName]={};try{for(var buf in this._buffers){var bufObj=this._buffers[buf];if(bufObj._isNested)continue;this._nestChildren=false;if(bufObj._children.length>0){for(var i=0;i0){hasErrors=true}}if(hasErrors){this._allRecordsRejected=true;this._someRecordsRejected=true;for(i=0;i0){this._allRecordsRejected=true;this._someRecordsRejected=false;hasCommittedRecords=false;for(i=0;i0&&!param.operations[0].success){this._allRecordsRejected=true;this._someRecordsRejected=true;for(i=0;i0){this._convertForServer=true;this._buffers[buf]._convertForServer=true}}};this._convertRequestData=function(objParam){var buf,beforeData;if(this._convertForServer===false){return}for(buf in this._buffers){if(this._buffers[buf]._convertForServer){if(objParam[this._dataSetName]){if(objParam[this._dataSetName][buf]){this._convertTableData(this._buffers[buf],objParam[this._dataSetName][buf])}beforeData=objParam[this._dataSetName]["prods:before"];if(beforeData&&beforeData[buf]){this._convertTableData(this._buffers[buf],beforeData[buf])}}else if(objParam[buf]){this._convertTableData(this._buffers[buf],objParam[buf])}}}};this._convertTableData=function(tableRef,tableData){var i;for(i=0;i0){this._confirmOperationExists(progress.data.JSDO._OP_DELETE);checkedDelete=true}if(!checkedCreate&&tableRef._added.length>0){this._confirmOperationExists(progress.data.JSDO._OP_CREATE);checkedCreate=true}if(!checkedUpdate&&Object.keys(tableRef._changed).length>0){this._confirmOperationExists(progress.data.JSDO._OP_UPDATE);checkedUpdate=true}if(checkedDelete&&checkedCreate&&checkedUpdate){break}}};this._confirmOperationExists=function(operation){var operationStr=PROGRESS_JSDO_OP_STRING[operation];if(typeof this._resource.generic[operationStr]!=="function"){throw new Error(msg.getMsgText("jsdoMSG046",operationStr.toUpperCase()))}};this.invoke=function(name,object){var deferred,promise;try{var request=this[name](object);if(request.deferred){deferred=request.deferred;promise=request.deferred.promise()}}catch(error){if(progress.util.Deferred.useJQueryPromises){throw error}else{if(!deferred){deferred=new progress.util.Deferred;promise=deferred.promise()}deferred.reject(this,false,{errorObject:error})}}return promise};this._syncTableRef=function(operation,tableRef,batch){var rowData,requestData,jsonObject,dataSetObject;if(tableRef._visited)return;tableRef._visited=true;if(!batch){batch={operations:[]}}else if(!batch.operations){batch.operations=[]}switch(operation){case progress.data.JSDO._OP_CREATE:for(var i=0;i0&&!dataSetJsonObject[tableRef._name])dataSetJsonObject[tableRef._name]=[];for(var i=0;i0||tableRef._added.length>0||hasUpdates){hasChanges=true;break}}return hasChanges};this._addDeletesToChangeSet=function(tableRef,dataSetJsonObject,request){for(var i=0;i=10){tmpIndex={};for(var i=0;ivalue2||value1===null)return false;else if(value11){for(var buf in this._buffers){if(this._buffers[buf]._isNested&&this._buffers[buf]._parent&&this._buffers[this._buffers[buf]._parent]){var srcData=this._buffers[this._buffers[buf]._parent]._data;var data=[];for(var i=0;i1){xhr.request.success=false;throw new Error(msg.getMsgText("jsdoMSG100"))}for(var i=0;i1){xhr.request.success=false;throw new Error(msg.getMsgText("jsdoMSG100"))}for(var i=0;i1){xhr.request.success=false;throw new Error(msg.getMsgText("jsdoMSG100"))}var recordId=beforeTableJsonObject[0]["prods:clientId"];if(!recordId){throw new Error(msg.getMsgText("jsdoMSG035","_checkForDeleteError()"))}if(beforeTableJsonObject[0]["prods:hasErrors"]){var prods_id=beforeTableJsonObject[0]["prods:id"];var errorString=this._getErrorStringFromJsonObject(dataSetJsonObject,tableRef,prods_id);this._setErrorString(tableRef,recordId,errorString,true);hasError=true}}return hasError};this._mergeUpdateForSubmit=function(jsonObject,xhr){var errorString;if(!this._dataSetName){throw new Error(msg.getMsgText("jsdoMSG036","_mergeUpdateForSubmit()"))}var dataSetJsonObject=jsonObject[this._dataSetName];if(dataSetJsonObject[this._dataSetName])dataSetJsonObject=dataSetJsonObject[this._dataSetName];var beforeJsonObject=dataSetJsonObject["prods:before"];for(var buf in this._buffers){var tableRef=this._buffers[buf];var tableJsonObject=dataSetJsonObject[tableRef._name];if(tableJsonObject instanceof Array){for(var i=0;i1){request.success=false;throw new Error(msg.getMsgText("jsdoMSG100"))}}if(beforeJsonObject){hasError=jsdo._checkForDeleteError(dataSetJsonObject,xhr)}if(hasError)request.success=false;if(jsdo.autoApplyChanges){if(!hasError){delete request.jsrecord._tableRef._beforeImage[request.jsrecord.data._id]}else{jsdo._deleteError(jsdo,success,request)}}};this._deleteError=function(jsdo,success,request){if(jsdo.autoApplyChanges){jsdo._undoDelete(request.jsrecord._tableRef,request.jsrecord.data._id)}};this._createComplete=function(jsdo,success,request){var xhr=request.xhr;var jsrecord=request.jsrecord;try{jsdo._deleteProdsProperties(jsrecord.data,false);jsrecord._tableRef.trigger("afterCreate",jsdo,jsrecord,request.success,request);jsdo.trigger("afterCreate",jsdo,jsrecord,request.success,request)}finally{request.complete=true;jsdo._checkSaveComplete(xhr)}};this._createSuccess=function(jsdo,success,request){var xhr=request.xhr;var record=request.response;var hasError=jsdo._mergeUpdateForCUD(record,xhr);if(hasError)request.success=false;if(jsdo.autoApplyChanges){if(!hasError){delete request.jsrecord._tableRef._beforeImage[request.jsrecord.data._id]}else{jsdo._createError(jsdo,success,request)}}};this._createError=function(jsdo,success,request){if(jsdo.autoApplyChanges){jsdo._undoCreate(request.jsrecord._tableRef,request.jsrecord.data._id)}};this._updateComplete=function(jsdo,success,request){var xhr=request.xhr;var jsrecord=request.jsrecord;try{jsdo._deleteProdsProperties(jsrecord.data,false);jsrecord._tableRef.trigger("afterUpdate",jsdo,jsrecord,request.success,request);jsdo.trigger("afterUpdate",jsdo,jsrecord,request.success,request)}finally{request.complete=true;jsdo._checkSaveComplete(xhr)}};this._updateSuccess=function(jsdo,success,request){var xhr=request.xhr;var hasError=jsdo._mergeUpdateForCUD(request.response,xhr);if(hasError){request.success=false}if(jsdo.autoApplyChanges){if(!hasError){request.success=true;delete request.jsrecord._tableRef._beforeImage[request.jsrecord.data._id]}else{jsdo._updateError(jsdo,success,request)}}};this._updateError=function(jsdo,success,request){if(jsdo.autoApplyChanges){request.success=false;jsdo._undoUpdate(request.jsrecord._tableRef,request.jsrecord.data._id)}};this._saveChangesSuccess=function(jsdo,success,request){var records=request.response;jsdo._mergeUpdateForSubmit(records,request.xhr);jsdo._clearErrors();var changes=jsdo.getChanges();jsdo._updateLastErrors(jsdo,null,changes);jsdo._setAllRecordsRejected(changes);if(jsdo.autoApplyChanges){jsdo._applyChanges()}};this._saveChangesError=function(jsdo,success,request){jsdo._setAllRecordsRejected(true);if(jsdo.autoApplyChanges){jsdo.rejectChanges()}jsdo._updateLastErrors(jsdo,null,null,request)};this._saveChangesSuccessTT=function(jsdo,success,request){var changes;jsdo._clearErrors();changes=jsdo.getChanges();jsdo._updateLastErrors(jsdo,null,changes);jsdo._setAllRecordsRejected(false)};this._saveChangesComplete=function(jsdo,success,request){if(request.xhr.status>=200&&request.xhr.status<300&&(jsdo._lastErrors.length>0||jsdo._someRecordsRejected)){request.success=false}if(jsdo._useSubmit===true){jsdo._fireCUDTriggersForSubmit(request)}jsdo._undefWorkingRecord();jsdo._fireAfterSaveChanges(request.success,request)};this._fireAfterSaveChanges=function(success,request){this.trigger("afterSaveChanges",this,success,request);if(request.jsrecords){if(request.deferred){if(success){request.deferred.resolve(this,success,request)}else{request.deferred.reject(this,success,request)}}}else if(request.batch&&request.batch.deferred){if(success){request.batch.deferred.resolve(this,success,request)}else{request.batch.deferred.reject(this,success,request)}}var clearErrorString=this.autoApplyChanges;if(request.jsrecords){for(var idx=0;idx=400&&request.xhr.status<600){try{var responseObject=JSON.parse(request.xhr.responseText);if(responseObject instanceof Array){errorArray=responseObject}else if(responseObject instanceof Object){errorArray.push(responseObject)}for(i=0;i=400&&request.xhr.status<600)){errors.push({type:progress.data.JSDO.ERROR,error:"Error: HTTP Status "+request.xhr.status+" "+request.xhr.statusText,responseText:request.xhr.responseText})}}return errors};this._updateLastErrors=function(jsdo,batch,changes,request){var errors,errorText,responseObject,i,j,buf;if(batch){if(batch.operations===undefined)return;for(i=0;i=200&&request.xhr.status<300){jsdo._lastErrors.push({errorString:request.jsrecord.data._errorString});jsdo._buffers[request.jsrecord._tableRef._name]._lastErrors.push({type:progress.data.JSDO.DATA_ERROR,id:request.jsrecord.data._id,error:request.jsrecord.data._errorString})}else{errors=this._getErrorsFromRequest(request);errorText="";for(j=0;j1&&errors[j].error.indexOf("(7243)")!=-1){continue}if(request.jsrecord&&(errors[j].type===progress.data.JSDO.APP_ERROR||errors[j].type===progress.data.JSDO.RETVAL)){errors[j].id=request.jsrecord.data._id;request.jsrecord._tableRef._lastErrors.push(errors[j])}if(errorText.length===0){errorText=errors[j].error}else{errorText+="\n"+errors[j].error}}jsdo._lastErrors.push({errorString:errorText})}}}}else if(changes instanceof Array){for(i=0;i=400&&request.xhr.status<600||request.xhr.status===0)){errors=this._getErrorsFromRequest(request);errorText="";for(j=0;j1&&errors[j].error.indexOf("(7243)")!=-1){continue}for(buf in this._buffers){this._buffers[buf]._lastErrors.push(errors[j])}if(errorText.length===0){errorText=errors[j].error}else{errorText+="\n"+errors[j].error}}jsdo._lastErrors.push({errorString:errorText})}};this._checkSaveComplete=function(xhr){if(xhr.request){var jsdo=xhr.request.jsdo;var batch=xhr.request.batch;if(jsdo&&batch&&jsdo._async){if(jsdo._isBatchComplete(batch)){var success=jsdo._isBatchSuccess(batch);var request={batch:batch,success:success};jsdo._undefWorkingRecord();jsdo._lastErrors=[];if(!success&&batch.operations){jsdo._updateLastErrors(jsdo,batch,null)}this._setAllRecordsRejected(batch);jsdo._fireAfterSaveChanges(success,request)}}}};this._isBatchSuccess=function(batch){if(batch.operations){for(var i=0;i=200&&xhr.status<300||xhr.status===0&&xhr.responseText!==""){request.success=true;xhr.jsdo._session._saveClientContextId(xhr);if(typeof xhr.onSuccessFn=="function"){var operation;if(xhr.request.fnName!==undefined&&xhr.jsdo._resource.fn[xhr.request.fnName]!==undefined){operation=xhr.jsdo._resource.fn[xhr.request.fnName].operation}else operation=null;if(operation===undefined||operation!==null&&operation.mergeMode)xhr.jsdo._mergeInvoke(request.response,xhr);if(request.success)xhr.onSuccessFn(xhr.jsdo,request.success,request);else if(typeof xhr.onErrorFn=="function")xhr.onErrorFn(xhr.jsdo,request.success,request)}}else{request.success=false;if(xhr.status===0){request.exception=new Error(msg.getMsgText("jsdoMSG101"))}if(typeof xhr.onErrorFn=="function"){xhr.onErrorFn(xhr.jsdo,request.success,request)}}}catch(e){request.success=false;request.exception=e;if(typeof xhr.onErrorFn=="function"){xhr.onErrorFn(xhr.jsdo,request.success,request)}}xhr.jsdo._session._checkServiceResponse(xhr,request.success,request);if(typeof xhr.onCompleteFn=="function"){xhr.onCompleteFn(xhr.jsdo,request.success,request)}}};this.acceptChanges=function(){for(var buf in this._buffers){this._buffers[this._buffers[buf]._name].acceptChanges()}};this.rejectChanges=function(){for(var buf in this._buffers){this._buffers[this._buffers[buf]._name].rejectChanges()}};this.getChanges=function(){var result=[];for(var buf in this._buffers){var changes=this._buffers[this._buffers[buf]._name].getChanges();result=result.concat(changes)}return result};this.hasChanges=function(){for(var buf in this._buffers){if(this._buffers[this._buffers[buf]._name].hasChanges())return true}return false};this._applyChanges=function(){for(var buf in this._buffers){this._buffers[this._buffers[buf]._name]._applyChanges()}};this.acceptRowChanges=function(){if(this._defaultTableRef)return this._defaultTableRef.acceptRowChanges();throw new Error(msg.getMsgText("jsdoMSG001","acceptRowChanges()"))};this.rejectRowChanges=function(){if(this._defaultTableRef)return this._defaultTableRef.rejectRowChanges();throw new Error(msg.getMsgText("jsdoMSG001","rejectRowChanges()"))};this.setProperties=function(propertiesObject){var prop;if(arguments.length<1){throw new Error(progress.data._getMsgText("jsdoMSG122","JSDO","setProperties",1))}if(arguments.length>1){throw new Error(progress.data._getMsgText("jsdoMSG122","JSDO","setProperties",1))}if(typeof propertiesObject=="object"){this._properties={};for(prop in propertiesObject){if(propertiesObject.hasOwnProperty(prop)){if(typeof propertiesObject[prop]!=="function"){this._properties[prop]=propertiesObject[prop]}}}}else if(propertiesObject===undefined||propertiesObject===null){this._properties={}}else{throw new Error(progress.data._getMsgText("jsdoMSG121","JSDO",1,"Object","setProperties"))}};this.setProperty=function(propertyName,propertyValue){if(arguments.length<2){throw new Error(progress.data._getMsgText("jsdoMSG122","JSDO","setProperty",2))}if(arguments.length!==2){throw new Error(progress.data._getMsgText("jsdoMSG122","JSDO","setProperty",2))}if(typeof propertyName!=="string"){throw new Error(progress.data._getMsgText("jsdoMSG121","JSDO",1,"string","setProperty"))}if(propertyValue===undefined){delete this._properties[propertyName]}else{this._properties[propertyName]=propertyValue}};this.getProperties=function(){if(arguments.length>0){throw new Error(progress.data._getMsgText("jsdoMSG122","JSDO","getProperties",0))}return this._properties};this.getProperty=function(propertyName){if(arguments.length<1){throw new Error(progress.data._getMsgText("jsdoMSG122","JSDO","getProperty",1))}if(arguments.length>1){throw new Error(progress.data._getMsgText("jsdoMSG122","JSDO","getProperty",1))}return this._properties[propertyName]};this.saveLocal=function saveLocal(arg1,arg2){var name;var dataMode;if(arguments.length>2){throw new Error(msg.getMsgText("jsdoMSG024","JSDO",arguments.callee.name+"()"))}if(typeof arg1=="string"||arg1===null||arg1===undefined){name=arg1;dataMode=arg2}else{name=null;dataMode=arg1}if(name===undefined||name===null||name===""){name="jsdo_"+this._resource.service.name+"_"+this._resource.name}if(typeof dataMode=="undefined"){dataMode=progress.data.JSDO.ALL_DATA}else{switch(dataMode){case progress.data.JSDO.ALL_DATA:case progress.data.JSDO.CHANGES_ONLY:break;default:throw new Error(msg.getMsgText("jsdoMSG115",arguments.callee.name))}}if(this._localStorage===null){this._localStorage=new progress.data.LocalStorage}var dataObj=this._prepareDataObjectForLocalStorage(dataMode);this._localStorage.saveToLocalStorage(name,dataObj)};this.readLocal=function readLocal(name){if(arguments.length>1){throw new Error(msg.getMsgText("jsdoMSG024","JSDO",arguments.callee.name+"()"))}if(name===undefined||name===null||name===""){name="jsdo_"+this._resource.service.name+"_"+this._resource.name}else if(typeof name!="string"){throw new Error(msg.getMsgText("jsdoMSG116","name",arguments.callee.name+"()"))}if(this._localStorage===null){this._localStorage=new progress.data.LocalStorage}var object=this._localStorage.readFromLocalStorage(name);if(object){if(this._hasMatchingSchema(object)===false)throw new Error(msg.getMsgText("jsdoMSG117",name));this._restoreFromLocalStorage(object,progress.data.JSDO.MODE_EMPTY)}return object!==null};this.addLocalRecords=function addLocalRecords(arg1,arg2,arg3){var name;var addMode;var keyFields;if(arguments.length<1){throw new Error(msg.getMsgText("jsdoMSG024","JSDO",arguments.callee.name+"()"))}if(typeof arg1=="string"){name=arg1;addMode=arg2;keyFields=arg3}else{name="jsdo_"+this._resource.service.name+"_"+this._resource.name;addMode=arg1;keyFields=arg2}if(typeof name=="undefined"||name===null||name===""){name="jsdo_"+this._resource.service.name+"_"+this._resource.name}else if(typeof name!="string"){throw new Error(msg.getMsgText("jsdoMSG116","name",arguments.callee.name+"()"))}if(addMode!=progress.data.JSDO.MODE_REPLACE){throw new Error(msg.getMsgText("jsdoMSG115",arguments.callee.name))}if(this._localStorage===null){this._localStorage=new progress.data.LocalStorage}var object=this._localStorage.readFromLocalStorage(name);if(object){if(this._hasMatchingSchema(object)===false)throw new Error(msg.getMsgText("jsdoMSG117",name));try{this._restoreFromLocalStorage(object,addMode,keyFields)}catch(e){var text=e.message;throw new Error(text.replace(new RegExp("addRecords","g"),"addLocalRecords"))}}return object!==null};this._containsPrimaryKeys=function _containsPrimaryKeys(){for(var buf in this._buffers){if(this._buffers[buf]._primaryKeys===null)return false}return true};this._hasMatchingSchema=function _hasMatchingSchema(storageObject){var isValid=true;if(storageObject===null||Object.keys(storageObject).length===0)return true;if(this._dataSetName){if(storageObject[this._dataSetName]){for(var buf in this._buffers)if(storageObject[this._dataSetName][buf]===undefined){isValid=false;break}}else isValid=false}else if(this._dataProperty){storageObject=storageObject["_localStorage"];if(storageObject===undefined||storageObject[this._dataProperty]===undefined)isValid=false}else{storageObject=storageObject["_localStorage"];if(storageObject===undefined||storageObject[this._defaultTableRef._name]===undefined)isValid=false}return isValid};this.deleteLocal=function deleteLocal(name){if(arguments.length>1){throw new Error(msg.getMsgText("jsdoMSG024","JSDO",arguments.callee.name+"()"))}if(name===undefined||name===null||name===""){name="jsdo_"+this._resource.service.name+"_"+this._resource.name}else if(typeof name!="string"){throw new Error(msg.getMsgText("jsdoMSG116","name",arguments.callee.name+"()"))}if(this._localStorage===null){this._localStorage=new progress.data.LocalStorage}this._localStorage.clearLocalStorage(name)};this._prepareDataObjectForLocalStorage=function(option){var storageObject={};if(this._dataSetName){switch(option){case progress.data.JSDO.ALL_DATA:storageObject=this._createDataAndChangeSet(this._dataSetName);break;case progress.data.JSDO.CHANGES_ONLY:storageObject=this._createChangeSet(this._dataSetName,true);break}}else if(this._dataProperty){switch(option){case progress.data.JSDO.ALL_DATA:storageObject=this._createDataAndChangeSet("_localStorage");break;case progress.data.JSDO.CHANGES_ONLY:storageObject=this._createChangeSet("_localStorage",true);break}}else{switch(option){case progress.data.JSDO.ALL_DATA:storageObject=this._createDataAndChangeSet("_localStorage");break;case progress.data.JSDO.CHANGES_ONLY:storageObject=this._createChangeSet("_localStorage",true);break}}return storageObject};this._restoreFromLocalStorage=function(storageObject,addMode,keyFields){if(storageObject&&Object.keys(storageObject).length>0){if(this._dataSetName){for(var buf in this._buffers)this._restoreDataForTable(this._buffers[buf],storageObject,addMode,keyFields)}else this._restoreDataForTable(this._defaultTableRef,storageObject,addMode,keyFields)}else if(addMode===progress.data.JSDO.MODE_EMPTY)this._clearData()};this._restoreDataForTable=function(tableRef,jsonObject,addMode,keyFields){keyFields=keyFields!==undefined?keyFields:tableRef._primaryKeys;if(keyFields===undefined&&this._resource.idProperty){keyFields=[];keyFields[0]=this._resource.idProperty}if(this._dataSetName){var oldUseRelationships=this.useRelationships;this.useRelationships=false;try{tableRef.addRecords(jsonObject,addMode,keyFields)}finally{this.useRelationships=oldUseRelationships}}else{this._dataSetName="_localStorage";tableRef.addRecords(jsonObject,addMode,keyFields);this._dataSetName=null}};this.getMethodProperties=function(operation,name){var idx;if(this._resource._operations){if(this._resource._operations[operation]){return this._resource._operations[operation]}}else{this._resource._operations={}}for(var idx=0;idx1?[params.sort]:[]}sortFields="";for(index=0;index=1?params.filter:undefined}if(params.filter){if(typeof params.filter==="string"){doConversion=false}params.tableRef=tableName;if(doConversion&¶ms.tableRef===undefined){throw new Error(msg.getMsgText("jsdoMSG045","fill() or read()","params","tableRef"))}if(reqCapabilities["filter"].mapping==="ablFilter"){if(doConversion){ablFilter=progress.util._convertToABLWhereString(jsdo._buffers[params.tableRef],params.filter)}else{ablFilter=params.filter}}else if(reqCapabilities["filter"].mapping==="sqlQuery"){if(doConversion){sqlQuery=progress.util._convertToSQLQueryString(jsdo._buffers[params.tableRef],params.filter,true)}else{sqlQuery=params.filter}}}filter=JSON.stringify({ablFilter:ablFilter,sqlQuery:sqlQuery,orderBy:sortFields,skip:params.skip,top:params.top,id:params.id});params={filter:filter}}return params}});if(typeof progress.ui=="undefined")progress.ui={};progress.ui.UITableRef=function UITableRef(tableRef){this._tableRef=tableRef;this._listview=null;this._detailPage=null;this._listviewContent=undefined;this.addItem=function(format){var detailForm;if(!this._tableRef.record)throw new Error(msg.getMsgText("jsdoMSG002",this._name));if(!this._listview)return;format=format?format:this._listview.format;detailForm=this._detailPage&&this._detailPage.name?this._detailPage.name:"";if(this._listviewContent===undefined){this.clearItems()}var text=this._listview.itemTemplate?this._listview.itemTemplate:progress.ui.UIHelper._itemTemplate;text=text.replace(new RegExp("{__format__}","g"),format);text=text.replace(new RegExp("{__id__}","g"),this._tableRef.record.data._id);text=text.replace(new RegExp("{__page__}","g"),detailForm);for(var field in this._tableRef.record.data){var value=this._tableRef.record.data[field];text=text.replace(new RegExp("{"+field+"}","g"),value!==undefined&&value!==null?value:"")}this._listviewContent+=text};this.clearItems=function(){if(this._listview){this._listviewContent="";var listviewElement=document.getElementById(this._listview.name);if(listviewElement){listviewElement.innerHTML=""}}};this._getFormFieldValue=function(fieldName,detailPageName){var value=null,field;if(detailPageName===undefined){if(this._detailPage&&this._detailPage.name)detailPageName=this._detailPage.name}if(typeof $=="function"&&detailPageName){field=$("#"+detailPageName+" #"+fieldName);if(!field||field.length===0)field=$("#"+detailPageName+' [dsid="'+fieldName+'"]');if(field&&field.length==1)value=field.val()}else{field=document.getElementById(fieldName);if(field){value=field.value}}return value};this._setFormField=function(fieldName,value,detailPageName){var field=null;if(detailPageName===undefined){if(this._detailPage&&this._detailPage.name)detailPageName=this._detailPage.name}if(typeof $=="function"&&detailPageName){field=$("#"+detailPageName+" #"+fieldName);if(!field||field.length===0)field=$("#"+detailPageName+' [dsid="'+fieldName+'"]');if(field&&field.length==1)field.val(value)}else{field=document.getElementById(fieldName);if(field){field.value=value}}};this.assign=function(detailPageName){if(!this._tableRef.record)throw new Error(msg.getMsgText("jsdoMSG002",this._tableRef._name));if(arguments.length!==0&&typeof detailPageName!="string")throw new Error(msg.getMsgText("jsdoMSG024","UIHelper","assign()"));this._tableRef.record.assign(null);var fieldName;var schema=this._tableRef.getSchema();for(var i=0;i0){for(var i=0;i0&&fieldName.charAt(0)=="_")continue;if(fields&&fields[fieldName]===undefined)continue;var fieldLabel=this._tableRef._schema[i].title?this._tableRef._schema[i].title:this._tableRef._schema[i].name;var text=this._detailPage&&this._detailPage.fieldTemplate?this._detailPage.fieldTemplate:progress.ui.UIHelper._fieldTemplate;text=text.replace(new RegExp("{__label__}","g"),fieldLabel);text=text.replace(new RegExp("{__name__}","g"),this._tableRef._schema[i].name);htmltext+=text}htmltext+="";fields=null;return htmltext};this.getListViewRecord=function(htmlIElement){var id=htmlIElement.getAttribute("data-id");return this._tableRef.findById(id)};this.getFormRecord=function(detailPageName){var id=this._getFormFieldValue("_id",detailPageName);return this._tableRef.findById(id)};this._getIdOfElement=function(name){if(typeof $=="function"){var element=$("#"+name);if(!element||element.length===0){element=$('[dsid="'+name+'"]');if(element&&element.length==1){var id=element.attr("id");if(id)return id}}}return name};this.setDetailPage=function setDetailPage(obj){if(!obj||typeof obj!="object")throw new Error(msg.getMsgText("jsdoMSG012",arguments.callee.name,"object"));if(!obj.name||typeof obj.name!="string")throw new Error(msg.getMsgText("jsdoMSG012",arguments.callee.name,"name"));this._detailPage=obj;this._detailPage.name=this._getIdOfElement(this._detailPage.name)};this.setListView=function setListView(obj){if(!obj||typeof obj!="object")throw new Error(msg.getMsgText("jsdoMSG012",arguments.callee.name,"object"));if(!obj.name||typeof obj.name!="string")throw new Error(msg.getMsgText("jsdoMSG012",arguments.callee.name,"name"));if(obj.format&&typeof obj.name!="string")throw new Error(msg.getMsgText("jsdoMSG012",arguments.callee.name,"format"));this._listview=obj;this._listview.name=this._getIdOfElement(this._listview.name);if(!this._listview.format){if(typeof $=="function"){for(var i=0;i{__format__}';progress.ui.UIHelper._defaultFieldTemplate='
'+''+'
';progress.ui.UIHelper._itemTemplate=progress.ui.UIHelper._defaultItemTemplate;progress.ui.UIHelper._fieldTemplate=progress.ui.UIHelper._defaultFieldTemplate;progress.ui.UIHelper.setItemTemplate=function(template){progress.ui.UIHelper._itemTemplate=template?template:progress.ui.UIHelper._defaultItemTemplate};progress.ui.UIHelper.setFieldTemplate=function(template){progress.ui.UIHelper._fieldTemplate=template?template:progress.ui.UIHelper._defaultFieldTemplate}})();(function(){if(progress===undefined){progress={}}if(progress.data===undefined){progress.data={}}progress.data.ServicesManager={};progress.data.ServicesManager._services=[];progress.data.ServicesManager._resources=[];progress.data.ServicesManager._data=[];progress.data.ServicesManager._sessions=[];progress.data.ServicesManager._jsdosessions=[];progress.data.ServicesManager.addResource=function(id,resource){if(progress.data.ServicesManager._resources[id]===undefined){progress.data.ServicesManager._resources[id]=resource}else{throw new Error("A resource named '"+id+"' was already loaded.")}};progress.data.ServicesManager.getResource=function(id){return progress.data.ServicesManager._resources[id]};progress.data.ServicesManager.addService=function(id,service){if(progress.data.ServicesManager._services[id]===undefined){progress.data.ServicesManager._services[id]=service}else{throw new Error("A service named '"+id+"' was already loaded.")}};progress.data.ServicesManager.getService=function(id){return progress.data.ServicesManager._services[id]};progress.data.ServicesManager.addSession=function(catalogURI,session){if(progress.data.ServicesManager._sessions[catalogURI]===undefined){progress.data.ServicesManager._sessions[catalogURI]=session}else{throw new Error("Cannot load catalog '"+catalogURI+"' multiple times.")}};progress.data.ServicesManager.addJSDOSession=function(catalogURI,jsdosession){if(progress.data.ServicesManager._jsdosessions[catalogURI]===undefined){progress.data.ServicesManager._jsdosessions[catalogURI]=jsdosession}else{throw new Error("Cannot load catalog '"+catalogURI+"' multiple times.")}};progress.data.ServicesManager.getSession=function(catalogURI){try{return progress.data.ServicesManager._sessions[catalogURI]}catch(e){return null}};progress.data.ServicesManager.cleanSession=function(session){var servicesKey,resourcesKey,sessionsKey,service,services=progress.data.ServicesManager._services,resources=progress.data.ServicesManager._resources,sessions=progress.data.ServicesManager._sessions,jsdosessions=progress.data.ServicesManager._jsdosessions;for(servicesKey in services){service=null;if(services[servicesKey]._session===session){service=services[servicesKey];delete services[servicesKey]}if(!service){continue}for(resourcesKey in resources){if(resources[resourcesKey].service===service){delete resources[resourcesKey]}}}for(sessionsKey in sessions){if(sessions[sessionsKey]===session){delete sessions[sessionsKey];if(jsdosessions[sessionsKey]){delete jsdosessions[sessionsKey]}}}};function extractParamsFromURL(url){var urlParams=[],paramName=null;if(typeof url==="string"){url.split("").forEach(function(c){if(c==="{"){paramName=""}else if(c==="}"){if(paramName){urlParams.push(paramName)}paramName=null}else if(paramName!==null){paramName+=c}})}return urlParams}progress.data.ServicesManager.addCatalog=function(services,session){var name,value;if(!services){throw new Error("Cannot find 'services' property in catalog file.")}if(services instanceof Array){services.forEach(function(service){if(progress.data.ServicesManager.getService(service.name)!==undefined){throw new Error("A service named '"+service.name+"' was already loaded.")}if(service.resources instanceof Array){service.resources.forEach(function(resource){if(progress.data.ServicesManager.getResource(resource.name)!==undefined){throw new Error("A resource named '"+resource.name+"' was already loaded.")}})}else{throw new Error("Missing 'resources' array in catalog.")}});for(var j=0;j1){throw new Error(progress.data._getMsgText("jsdoMSG122","Session","setContext",1))}if(typeof context==="object"){contextObject={};for(prop in context){if(context.hasOwnProperty(prop)){if(typeof context[prop]!=="function"){contextObject[prop]=context[prop]}}}}else if(context===undefined||context===null){contextObject={}}else{throw new Error(progress.data._getMsgText("jsdoMSG121","Session",1,"Object","setContextProperty"))}contextString=null};this.getContext=function(){if(arguments.length>0){throw new Error(progress.data._getMsgText("jsdoMSG122","Session","getContext",0))}return contextObject};this.getContextProperty=function(propertyName){if(arguments.length<1){throw new Error(progress.data._getMsgText("jsdoMSG122","Session","getContextProperty",1))}if(arguments.length>1){throw new Error(progress.data._getMsgText("jsdoMSG122","Session","getContextProperty",1))}return contextObject[propertyName]}};progress.data.Session=function Session(options){var defPropSupported=false;if(typeof Object.defineProperty==="function"){defPropSupported=true}var that=this,jsdosession,isUserAgentiOS=false,isFirefox=false,isEdge=false,isIE=false,canPassCredentialsToOpenWithCORS=false,defaultiOSBasicAuthTimeout=4e3,deviceIsOnline=true,restApplicationIsOnline=false,oepingAvailable=false,defaultPartialPingURI="/rest/_oeping",partialPingURI=defaultPartialPingURI,_storageKey,_authProvider=null,customCredentials=false,storedAuthModel,storedURI,newURI,stateWasReadFromStorage=false;if(!options||options._silent!==true){console.warn("Session: As of JSDO 4.4, the Session object has been deprecated. "+"Please use the JSDOSession object instead.")}if(typeof navigator!=="undefined"){if(typeof navigator.userAgent!=="undefined"){isUserAgentiOS=navigator.userAgent.match(/(iPad)|(iPhone)|(iPod)/i);isFirefox=navigator.userAgent.toLowerCase().indexOf("firefox")>-1;isEdge=navigator.userAgent.indexOf("Edge/")>-1;isIE=navigator.userAgent.indexOf("Trident/")>-1||navigator.userAgent.indexOf("MSIE 10")>-1}}canPassCredentialsToOpenWithCORS=!(isFirefox||isEdge||isIE);function canPassCredentialsToOpen(){return canPassCredentialsToOpenWithCORS}this._onlineHandler=function(){setDeviceIsOnline(true);that.trigger("online",that,null)};this._offlineHandler=function(){setDeviceIsOnline(false);that.trigger("offline",that,progress.data.Session.DEVICE_OFFLINE,null)};if(typeof window!=="undefined"&&window.addEventListener){window.addEventListener("online",this._onlineHandler,false);window.addEventListener("offline",this._offlineHandler,false)}var _catalogURIs=[];var _services=[];var _jsdos=[];this.onOpenRequest=null;var _password=null;if(defPropSupported){var _userName=null;Object.defineProperty(this,"userName",{get:function(){return _userName},enumerable:true});var _loginTarget="/static/home.html";Object.defineProperty(this,"loginTarget",{get:function(){return _loginTarget},enumerable:true});var _serviceURI=null;Object.defineProperty(this,"serviceURI",{get:function(){return _serviceURI},enumerable:true});Object.defineProperty(this,"catalogURIs",{get:function(){return _catalogURIs},enumerable:true});Object.defineProperty(this,"services",{get:function(){return _services},enumerable:true});var _loginResult=null;Object.defineProperty(this,"loginResult",{get:function(){return _loginResult},enumerable:true});var _loginHttpStatus=null;Object.defineProperty(this,"loginHttpStatus",{get:function(){return _loginHttpStatus},enumerable:true});var _clientContextId=null;Object.defineProperty(this,"clientContextId",{get:function(){return _clientContextId},enumerable:true});var _authenticationModel=progress.data.Session.AUTH_TYPE_ANON;Object.defineProperty(this,"authenticationModel",{get:function(){return _authenticationModel},set:function(newval){if(newval){newval=newval.toLowerCase()}switch(newval){case progress.data.Session.AUTH_TYPE_FORM:case progress.data.Session.AUTH_TYPE_BASIC:case progress.data.Session.AUTH_TYPE_ANON:case progress.data.Session.AUTH_TYPE_SSO:case null:_authenticationModel=newval;storeSessionInfo("authenticationModel",newval);break;default:throw new Error("Error setting Session.authenticationModel. '"+newval+"' is an invalid value.")}},enumerable:true});var _lastSessionXHR=null;Object.defineProperty(this,"lastSessionXHR",{get:function(){return _lastSessionXHR},enumerable:true});Object.defineProperty(this,"connected",{get:function(){return this.loginResult===progress.data.Session.LOGIN_SUCCESS&&restApplicationIsOnline&&deviceIsOnline},enumerable:true});Object.defineProperty(this,"JSDOs",{get:function(){return _jsdos},enumerable:true});var _pingInterval=0;var _timeoutID=null;Object.defineProperty(this,"pingInterval",{get:function(){return _pingInterval},set:function(newval){if(typeof newval==="number"&&newval>=0){_pingInterval=newval;storeSessionInfo("pingInterval",newval);if(newval>0){if(this.loginResult===progress.data.Session.LOGIN_SUCCESS){_timeoutID=setTimeout(this._autoping,newval)}}else if(newval===0){clearTimeout(_timeoutID);_pingInterval=0}}else{throw new Error("Error setting Session.pingInterval. '"+newval+"' is an invalid value.")}},enumerable:true});var _contextProperties=new progress.data.ContextProperties;Object.defineProperty(this,"_contextProperties",{get:function(){return _contextProperties},enumerable:false});var isInvalidated=false;Object.defineProperty(this,"_isInvalidated",{get:function(){return isInvalidated},enumerable:false});Object.defineProperty(this,"_authProvider",{get:function(){return _authProvider},set:function(newval){if(_authProvider){throw new Error("Internal Error setting Session._authProvider. '"+"The property has already been set.")}setAuthProvider(newval)},enumerable:false})}else{this.userName=null;this.loginTarget="/static/home.html";this.serviceURI=null;this.catalogURIs=[];this.services=[];this.loginResult=null;this.loginHttpStatus=null;this.clientContextId=null;this.authenticationModel=progress.data.Session.AUTH_TYPE_ANON;this.lastSessionXHR=null}function storeSessionInfo(infoName,value){var key;if(that.loginResult===progress.data.Session.LOGIN_SUCCESS&&typeof sessionStorage==="object"&&_storageKey){key=_storageKey;if(infoName){key=key+"."+infoName}if(typeof value!=="undefined"){sessionStorage.setItem(key,JSON.stringify(value))}}}function retrieveSessionInfo(infoName){var key,jsonStr,value=null;if(typeof sessionStorage==="object"&&_storageKey){key=_storageKey;if(infoName){key=key+"."+infoName}jsonStr=sessionStorage.getItem(key);if(jsonStr!==null){try{value=JSON.parse(jsonStr)}catch(e){value=null}}return value}}function clearSessionInfo(infoName){var key;if(typeof sessionStorage==="object"&&_storageKey){key=_storageKey;if(infoName){key=key+"."+infoName;sessionStorage.removeItem(key)}}}function storeAllSessionInfo(){if(_storageKey){storeSessionInfo("loginResult",that.loginResult);storeSessionInfo("userName",that.userName);storeSessionInfo("serviceURI",that.serviceURI);storeSessionInfo("loginHttpStatus",that.loginHttpStatus);storeSessionInfo("authenticationModel",that.authenticationModel);storeSessionInfo("pingInterval",that.pingInterval);storeSessionInfo("oepingAvailable",oepingAvailable);storeSessionInfo("partialPingURI",partialPingURI);storeSessionInfo("clientContextId",that.clientContextId);storeSessionInfo("deviceIsOnline",deviceIsOnline);storeSessionInfo("restApplicationIsOnline",restApplicationIsOnline);if(that._authProvider){storeSessionInfo("_authProvider.init",{uri:that._authProvider.uri,authenticationModel:that._authProvider.authenticationModel})}storeSessionInfo(_storageKey,true)}}function clearAllSessionInfo(){if(_storageKey){if(retrieveSessionInfo(_storageKey)){clearSessionInfo("loginResult");clearSessionInfo("userName");clearSessionInfo("serviceURI");clearSessionInfo("loginHttpStatus");clearSessionInfo("clientContextId");clearSessionInfo("deviceIsOnline");clearSessionInfo("restApplicationIsOnline");clearSessionInfo("authenticationModel");clearSessionInfo("pingInterval");clearSessionInfo("oepingAvailable");clearSessionInfo("partialPingURI");clearSessionInfo("_authProvider.init");clearSessionInfo(_storageKey)}}}function setSessionInfoFromStorage(key){var authproviderInitObject;if(retrieveSessionInfo(key)){setLoginResult(retrieveSessionInfo("loginResult"),this);setUserName(retrieveSessionInfo("userName"),this);setServiceURI(retrieveSessionInfo("serviceURI"),this);setLoginHttpStatus(retrieveSessionInfo("loginHttpStatus"),this);setClientContextID(retrieveSessionInfo("clientContextId"),this);setDeviceIsOnline(retrieveSessionInfo("deviceIsOnline"));setRestApplicationIsOnline(retrieveSessionInfo("restApplicationIsOnline"));that.authenticationModel=retrieveSessionInfo("authenticationModel");that.pingInterval=retrieveSessionInfo("pingInterval");setOepingAvailable(retrieveSessionInfo("oepingAvailable"));setPartialPingURI(retrieveSessionInfo("partialPingURI"));if(!that._authProvider){authproviderInitObject=retrieveSessionInfo("_authProvider.init");if(authproviderInitObject){setAuthProvider(new progress.data.AuthenticationProvider(authproviderInitObject))}}}}function setUserName(newname,sessionObject){if(defPropSupported){_userName=newname}else{sessionObject.userName=newname}storeSessionInfo("userName",newname)}function setLoginTarget(target,sessionObject){if(defPropSupported){_loginTarget=target}else{sessionObject.loginTarget=target}}function setServiceURI(url,sessionObject){if(defPropSupported){_serviceURI=url}else{sessionObject.serviceURI=url}storeSessionInfo("serviceURI",url)}function pushCatalogURIs(url,sessionObject){if(defPropSupported){_catalogURIs.push(url)}else{sessionObject.catalogURIs.push(url)}}function pushService(serviceObject,sessionObject){if(defPropSupported){_services.push(serviceObject)}else{sessionObject.services.push(serviceObject)}}function findService(serviceName){_services.forEach(function(service){if(service.name===serviceName){return service}});return null}function setLoginResult(result,sessionObject){if(defPropSupported){_loginResult=result}else{sessionObject.loginResult=result}if(result===progress.data.Session.LOGIN_SUCCESS){storeSessionInfo("loginResult",result)}else{clearAllSessionInfo()}}function setLoginHttpStatus(status,sessionObject){if(defPropSupported){_loginHttpStatus=status}else{sessionObject.loginHttpStatus=status}storeSessionInfo("loginHttpStatus",status)}function setClientContextIDfromXHR(xhr,sessionObject){if(xhr){setClientContextID(getResponseHeaderNoError(xhr,"X-CLIENT-CONTEXT-ID"),sessionObject)}}function setClientContextID(ccid,sessionObject){if(defPropSupported){_clientContextId=ccid}else{sessionObject.clientContextId=ccid}storeSessionInfo("clientContextId",ccid)}function setLastSessionXHR(xhr,sessionObject){if(defPropSupported){_lastSessionXHR=xhr}else{sessionObject.lastSessionXHR=xhr}}function setDeviceIsOnline(value){deviceIsOnline=value;storeSessionInfo("deviceIsOnline",value)}function setAuthProvider(value){_authProvider=value?value:null}function setRestApplicationIsOnline(value){restApplicationIsOnline=value;storeSessionInfo("restApplicationIsOnline",value)}function setOepingAvailable(value){oepingAvailable=value;storeSessionInfo("oepingAvailable",value)}function setPartialPingURI(value){partialPingURI=value;storeSessionInfo("partialPingURI",value)}function getResponseHeaderNoError(xhr,headerName){var allHeaders=xhr._pdsResponseHeaders,regExp;if(allHeaders===undefined){allHeaders=xhr.getAllResponseHeaders();if(allHeaders){xhr._pdsResponseHeaders=allHeaders}else{xhr._pdsResponseHeaders=null}}if(allHeaders){regExp=new RegExp("^"+headerName+":","mi");if(allHeaders.match(regExp)){return xhr.getResponseHeader(headerName)}}return null}this._pushJSDOs=function(jsdo){_jsdos.push(jsdo)};this._openRequest=function(xhr,verb,url,async,callback){var urlPlusCCID,that=this;function afterOpenAndAuthorize(arg){if(arg instanceof Error){throw arg}else{if(that.clientContextId&&that.clientContextId!=="0"){xhr.setRequestHeader("X-CLIENT-CONTEXT-ID",that.clientContextId)}setRequestHeaderFromContextProps(that,xhr);if(typeof that.onOpenRequest==="function"){var params={xhr:xhr,verb:verb,uri:urlPlusCCID,async:async,formPreTest:false,session:that};that.onOpenRequest(params)}if(callback){callback()}}}if(this._isInvalidated){throw new Error(progress.data._getMsgText("jsdoMSG510","Session"))}if(this.loginResult!==progress.data.Session.LOGIN_SUCCESS&&!this._authProvider&&this.authenticationModel){throw new Error("Attempted to make server request when there is no active session.")}urlPlusCCID=this._prependAppURL(url);urlPlusCCID=this._addCCIDtoURL(urlPlusCCID);if(progress.data.Session._useTimeStamp){urlPlusCCID=progress.data.Session._addTimeStampToURL(urlPlusCCID)}if(this._authProvider){this._authProvider._openRequestAndAuthorize(xhr,verb,urlPlusCCID,async,afterOpenAndAuthorize)}else{this._setXHRCredentials(xhr,verb,urlPlusCCID,this.userName,_password,async);if(this.authenticationModel===progress.data.Session.AUTH_TYPE_FORM){_addWithCredentialsAndAccept(xhr,"application/json")}afterOpenAndAuthorize(xhr)}};this.pingTestCallback=function(cbArgs){var foundOeping=cbArgs.pingResult?true:false;setOepingAvailable(foundOeping)};this._onReadyStateChangeGeneric=function(){var xhr=this;var result;var errorObject;clearTimeout(xhr._requestTimeout);if(xhr.readyState===4){result=null;errorObject=null;if(typeof xhr.onResponseFn==="function"){try{result=xhr.onResponseFn(xhr)}catch(e){errorObject=e}}if(typeof xhr.onResponseProcessedFn==="function"){if(!result){result=progress.data.Session.GENERAL_FAILURE}xhr.onResponseProcessedFn(xhr.pdsession,result,errorObject,xhr)}}};this._disconnect=function(deferred){this._processDisconnectResult(null,deferred)};this._processDisconnectResult=function(xhr,deferred){this._reinitializeAfterLogout(this,progress.data.Session.SUCCESS);this._disconnectComplete(this,progress.data.Session.SUCCESS,null,null,deferred)};this._disconnectComplete=function(pdsession,result,errObj,xhr,deferred){pdsession.trigger("afterDisconnect",pdsession,result,errObj,xhr,deferred)};var pwSave=null;var unameSave=null;this.login=function(serviceURI,loginUserName,loginPassword,loginTarget){var uname,pw,isAsync=false,args=[],deferred,iOSBasicAuthTimeout,uriForRequest;pwSave=null;unameSave=null;if(!defPropSupported){this.authenticationModel=this.authenticationModel.toLowerCase()}if(this.authenticationModel===progress.data.Session.AUTH_TYPE_SSO){throw new Error(progress.data._getMsgText("jsdoMSG057","Session","login()"))}if(this.loginResult===progress.data.Session.LOGIN_SUCCESS||this._authProvider){throw new Error("Attempted to call login() on a Session object that is already logged in.")}if(arguments.length>0){if(arguments[0]&&typeof arguments[0]==="object"){args[0]=arguments[0].serviceURI;args[1]=arguments[0].userName;args[2]=arguments[0].password;args[3]=arguments[0].loginTarget;args[4]=arguments[0].async;deferred=arguments[0].deferred;iOSBasicAuthTimeout=arguments[0].iOSBasicAuthTimeout;if(typeof iOSBasicAuthTimeout==="undefined"){iOSBasicAuthTimeout=defaultiOSBasicAuthTimeout}else if(iOSBasicAuthTimeout&&typeof iOSBasicAuthTimeout!=="number"){throw new Error(progress.data._getMsgText("jsdoMSG033","Session","login","The iOSBasicAuthTimeout argument was invalid."))}}else{args=arguments}}if(args.length>0){if(args[0]){var restURLtemp=args[0];if(restURLtemp[restURLtemp.length-1]==="/"){restURLtemp=restURLtemp.substring(0,restURLtemp.length-1)}setServiceURI(restURLtemp,this)}else if(!this.serviceURI){setLoginResult(progress.data.Session.LOGIN_GENERAL_FAILURE,this);throw new Error("Session.login() is missing the serviceURI argument.")}if(args[1]){uname=args[1]}if(args[2]){pw=args[2]}if(args[3]){setLoginTarget(args[3],this)}if(args[4]){if(typeof args[4]==="boolean"){isAsync=args[4]}else{throw new Error("Session.login() was passed an async setting that is not a boolean.")}}}else{setLoginResult(progress.data.Session.LOGIN_GENERAL_FAILURE,this);throw new Error("Session.login() is missing the serviceURI argument.")}unameSave=uname;pwSave=pw;if(this.authenticationModel===progress.data.Session.AUTH_TYPE_ANON||this.authenticationModel===progress.data.Session.AUTH_TYPE_FORM){uname=null;pw=null}var xhr=new XMLHttpRequest;xhr.pdsession=this;try{uriForRequest=this.serviceURI+this.loginTarget;if(progress.data.Session._useTimeStamp){uriForRequest=progress.data.Session._addTimeStampToURL(uriForRequest)}this._setXHRCredentials(xhr,"GET",uriForRequest,uname,pw,isAsync);progress.data.Session._setNoCacheHeaders(xhr);setRequestHeaderFromContextProps(this,xhr);if(this.authenticationModel===progress.data.Session.AUTH_TYPE_FORM){_addWithCredentialsAndAccept(xhr,"application/json,text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")}xhr._isAsync=isAsync;if(isAsync){xhr.onreadystatechange=this._onReadyStateChangeGeneric;if(this.authenticationModel===progress.data.Session.AUTH_TYPE_FORM){xhr.onResponseFn=this._afterFormPretestLogin}else{xhr.onResponseFn=this._processLoginResult;xhr.onResponseProcessedFn=this._loginComplete}if(this.authenticationModel===progress.data.Session.AUTH_TYPE_BASIC&&isUserAgentiOS&&iOSBasicAuthTimeout>0){xhr._requestTimeout=setTimeout(function(){clearTimeout(xhr._requestTimeout);xhr._iosTimeOutExpired=true;xhr.abort()},iOSBasicAuthTimeout)}xhr._jsdosession=jsdosession;xhr._deferred=deferred}if(typeof this.onOpenRequest==="function"){var isFormPreTest=false;if(this.authenticationModel===progress.data.Session.AUTH_TYPE_FORM){isFormPreTest=true}setLastSessionXHR(xhr,this);var params={xhr:xhr,verb:"GET",uri:this.serviceURI+this.loginTarget,async:false,formPreTest:isFormPreTest,session:this};this.onOpenRequest(params);xhr=params.xhr}setLastSessionXHR(xhr,this);xhr.send(null)}catch(e){clearTimeout(xhr._requestTimeout);setLoginHttpStatus(xhr.status,this);setLoginResult(progress.data.Session.LOGIN_GENERAL_FAILURE,this);unameSave=null;pwSave=null;throw e}if(isAsync){return progress.data.Session.ASYNC_PENDING}else{setLoginHttpStatus(xhr.status,this);if(this.authenticationModel===progress.data.Session.AUTH_TYPE_FORM){return this._afterFormPretestLogin(xhr)}else{return this._processLoginResult(xhr)}}};this._afterFormPretestLogin=function(xhr){var pdsession=xhr.pdsession;setLoginHttpStatus(xhr.status,xhr.pdsession);var formLoginParams={xhr:xhr,pw:pwSave,uname:unameSave,theSession:pdsession};try{return doFormLogin(formLoginParams)}catch(e){pwSave=null;unameSave=null;throw e}};function doFormLogin(args){var xhr=args.xhr;var theSession=args.theSession;var oldXHR;var contentType=null;var needAuth=false;var params={session:theSession,xhr:xhr,statusFromjson:null};contentType=xhr.getResponseHeader("Content-Type");if(contentType&&contentType.indexOf("application/json")>=0){handleJSONLoginResponse(params);if(!params.statusFromjson||params.statusFromjson>=400&¶ms.statusFromjson<500){needAuth=true}else{setLoginHttpStatus(params.statusFromjson,theSession)}}else{if(theSession.loginHttpStatus===200){if(_gotLoginForm(xhr)){needAuth=true}}}if(needAuth){oldXHR=xhr;xhr=new XMLHttpRequest;args.xhr=xhr;params.xhr=xhr;xhr.pdsession=oldXHR.pdsession;xhr._isAsync=oldXHR._isAsync;xhr._deferred=oldXHR._deferred;xhr._jsdosession=oldXHR._jsdosession;xhr.open("POST",theSession.serviceURI+"/static/auth/j_spring_security_check",xhr._isAsync);xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");xhr.setRequestHeader("Cache-Control","max-age=0");setRequestHeaderFromContextProps(theSession,xhr);_addWithCredentialsAndAccept(xhr,"application/json");try{if(typeof theSession.onOpenRequest==="function"){var cbparams={xhr:xhr,verb:"POST",uri:theSession.serviceURI+"/static/auth/j_spring_security_check",async:xhr._isAsync,formPreTest:false,session:theSession};theSession.onOpenRequest(cbparams);xhr=cbparams.xhr}if(xhr._isAsync){xhr.onreadystatechange=theSession._onReadyStateChangeGeneric;xhr.onResponseFn=theSession._afterFormLogin;xhr.onResponseProcessedFn=theSession._loginComplete}xhr.send("j_username="+encodeURIComponent(args.uname)+"&j_password="+encodeURIComponent(args.pw)+"&submit=Submit")}catch(e){setLoginResult(progress.data.Session.LOGIN_GENERAL_FAILURE,theSession);setLoginHttpStatus(xhr.status,theSession);unameSave=null;pwSave=null;throw e}}if(xhr._isAsync&&!needAuth){xhr.onResponseProcessedFn=theSession._loginComplete;return theSession._afterFormLogin(xhr)}if(!xhr._isAsync){return theSession._afterFormLogin(xhr)}}this._afterFormLogin=function(xhr){var theSession=xhr.pdsession;var params={session:theSession,xhr:xhr,statusFromjson:null};var contentType=xhr.getResponseHeader("Content-Type");if(contentType&&contentType.indexOf("application/json")>=0){handleJSONLoginResponse(params);if(!params.statusFromjson){throw new Error("Internal OpenEdge Mobile client error handling login response. HTTP status: "+xhr.status+".")}setLoginHttpStatus(params.statusFromjson,theSession)}else{if(xhr.status===200){if(_gotLoginFailure(xhr)||_gotLoginForm(xhr)){setLoginHttpStatus(401,theSession)}else{setLoginHttpStatus(xhr.status,theSession)}}}return theSession._processLoginResult(xhr)};this._processLoginResult=function(xhr){var pdsession=xhr.pdsession;setLoginHttpStatus(xhr.status,xhr.pdsession);if(pdsession.loginHttpStatus===200){setLoginResult(progress.data.Session.LOGIN_SUCCESS,pdsession);setRestApplicationIsOnline(true);setUserName(unameSave,pdsession);_password=pwSave;pdsession._saveClientContextId(xhr);storeAllSessionInfo();var pingTestArgs={pingURI:null,async:true,onCompleteFn:null,fireEventIfOfflineChange:true,onReadyStateFn:pdsession._pingtestOnReadyStateChange};pingTestArgs.pingURI=pdsession._makePingURI();pdsession._sendPing(pingTestArgs)}else{if(pdsession.loginHttpStatus===401){setLoginResult(progress.data.Session.LOGIN_AUTHENTICATION_FAILURE,pdsession)}else{setLoginResult(progress.data.Session.LOGIN_GENERAL_FAILURE,pdsession)}}setLastSessionXHR(xhr,pdsession);updateContextPropsFromResponse(pdsession,xhr);unameSave=null;pwSave=null;if(xhr._iosTimeOutExpired){throw new Error(progress.data._getMsgText("jsdoMSG047","login"))}return pdsession.loginResult};this._loginComplete=function(pdsession,result,errObj,xhr){pdsession.trigger("afterLogin",pdsession,result,errObj,xhr)};this.logout=function(args){var isAsync=false,errorObject=null,xhr,deferred,params;if(this.authenticationModel===progress.data.Session.AUTH_TYPE_SSO){throw new Error(progress.data._getMsgText("jsdoMSG057","Session","logout()"))}if(this.loginResult!==progress.data.Session.LOGIN_SUCCESS&&this.authenticationModel){throw new Error("Attempted to call logout when there is no active session.")}if(typeof args==="object"){isAsync=args.async;if(isAsync&&typeof isAsync!=="boolean"){throw new Error(progress.data._getMsgText("jsdoMSG033","Session","logout","The async argument was invalid."))}deferred=args.deferred}xhr=new XMLHttpRequest;xhr.pdsession=this;try{xhr._jsdosession=jsdosession;xhr._deferred=deferred;if(this.authenticationModel===progress.data.Session.AUTH_TYPE_FORM||this.authenticationModel===progress.data.Session.AUTH_TYPE_BASIC){if(isAsync){xhr.onreadystatechange=this._onReadyStateChangeGeneric;xhr.onResponseFn=this._processLogoutResult;xhr.onResponseProcessedFn=this._logoutComplete}xhr.open("GET",this.serviceURI+"/static/auth/j_spring_security_logout",isAsync);try{xhr.withCredentials=true}catch(e){}xhr.setRequestHeader("Accept","application/json");setRequestHeaderFromContextProps(this,xhr);if(typeof this.onOpenRequest==="function"){setLastSessionXHR(xhr,this);params={xhr:xhr,verb:"GET",uri:this.serviceURI+"/static/auth/j_spring_security_logout",async:false,formPreTest:false,session:this};this.onOpenRequest(params);xhr=params.xhr}setLastSessionXHR(xhr,this);xhr.send()}else{xhr._anonymousLogoutOK=true}}catch(e){this._reinitializeAfterLogout(this,false);throw e}if(!isAsync){try{this._processLogoutResult(xhr)}catch(e){throw e}}if(isAsync&&this.authenticationModel===progress.data.Session.AUTH_TYPE_ANON){try{this._processLogoutResult(xhr)}catch(e){errorObject=e}this._logoutComplete(this,null,errorObject,xhr)}};this.invalidate=function(){isInvalidated=true;cleanServicesManager()};this._logoutComplete=function(pdsession,result,errorObject,xhr){pdsession.trigger("afterLogout",pdsession,errorObject,xhr)};this._processLogoutResult=function(xhr){var logoutSucceeded;var pdsession=xhr.pdsession;var basicStatusOK=false;if(xhr._anonymousLogoutOK){logoutSucceeded=true}else if(xhr.status!==200){if(pdsession.authenticationModel===progress.data.Session.AUTH_TYPE_BASIC){if(xhr.status===404){logoutSucceeded=true}else{logoutSucceeded=false;throw new Error("Error logging out, HTTP status = "+xhr.status)}}else{logoutSucceeded=false;throw new Error("Error logging out, HTTP status = "+xhr.status)}}else{logoutSucceeded=true}updateContextPropsFromResponse(pdsession,xhr);pdsession._reinitializeAfterLogout(pdsession,logoutSucceeded)};this._reinitializeAfterLogout=function(pdsession,success){setLoginResult(null,pdsession);setLoginHttpStatus(null,pdsession);setClientContextID(null,pdsession);setUserName(null,pdsession);setAuthProvider(null);_password=null;if(success){setRestApplicationIsOnline(false);setOepingAvailable(false);setPartialPingURI(defaultPartialPingURI);setLastSessionXHR(null,pdsession);clearTimeout(_timeoutID)}};this.addCatalog=function(arg1,arg2,arg3,arg4){var catalogURI,catalogUserName,catalogPassword,isAsync=false,xhr,deferred,iOSBasicAuthTimeout,catalogIndex,authProvider,that=this;function addCatalogAfterOpen(){progress.data.Session._setNoCacheHeaders(xhr);setRequestHeaderFromContextProps(that,xhr);if(isAsync){xhr.onreadystatechange=that._onReadyStateChangeGeneric;xhr.onResponseFn=that._processAddCatalogResult;xhr.onResponseProcessedFn=that._addCatalogComplete;if(that.authenticationModel===progress.data.Session.AUTH_TYPE_BASIC&&isUserAgentiOS&&iOSBasicAuthTimeout){xhr._requestTimeout=setTimeout(function(){clearTimeout(xhr._requestTimeout);xhr._iosTimeOutExpired=true;xhr.abort()},iOSBasicAuthTimeout)}xhr._jsdosession=jsdosession;xhr._deferred=deferred;xhr._catalogIndex=catalogIndex}try{if(typeof that.onOpenRequest==="function"){setLastSessionXHR(xhr,that);var params={xhr:xhr,verb:"GET",uri:catalogURI,async:false,formPreTest:false,session:that};that.onOpenRequest(params);xhr=params.xhr}setLastSessionXHR(xhr,that);xhr.send(null)}catch(e){throw new Error("Error retrieving catalog '"+catalogURI+"'.\n"+e.message)}if(isAsync){return progress.data.Session.ASYNC_PENDING}else{return that._processAddCatalogResult(xhr)}}if(this._isInvalidated){throw new Error(progress.data._getMsgText("jsdoMSG510","JSDOSession"))}customCredentials=true;if(arguments.length>0){if(typeof arg1==="object"){if(!arguments[0].offlineAddCatalog){if(this.loginResult!==progress.data.Session.LOGIN_SUCCESS&&!this._authProvider&&this.authenticationModel){throw new Error("Attempted to call addCatalog when there is no active session.")}}catalogURI=arg1.catalogURI;if(!catalogURI||typeof catalogURI!=="string"){throw new Error(progress.data._getMsgText("jsdoMSG033","Session","addCatalog","The catalogURI argument was missing or invalid."))}catalogUserName=arg1.userName;if(catalogUserName&&typeof catalogUserName!=="string"){throw new Error(progress.data._getMsgText("jsdoMSG033","Session","addCatalog","The catalogUserName argument was invalid."))}catalogPassword=arg1.password;if(catalogPassword&&typeof catalogPassword!=="string"){throw new Error(progress.data._getMsgText("jsdoMSG033","Session","addCatalog","The catalogPassword argument was invalid."))}isAsync=arg1.async;if(isAsync&&typeof isAsync!=="boolean"){throw new Error(progress.data._getMsgText("jsdoMSG033","Session","addCatalog","The async argument was invalid."))}iOSBasicAuthTimeout=arg1.iOSBasicAuthTimeout;if(typeof iOSBasicAuthTimeout==="undefined"){iOSBasicAuthTimeout=defaultiOSBasicAuthTimeout}else if(iOSBasicAuthTimeout&&typeof iOSBasicAuthTimeout!=="number"){throw new Error(progress.data._getMsgText("jsdoMSG033","Session","addCatalog","The iOSBasicAuthTimeout argument was invalid."))}authProvider=arg1.authProvider;deferred=arg1.deferred;catalogIndex=arg1.catalogIndex}else{catalogURI=arg1;if(typeof catalogURI!=="string"){throw new Error("First argument to Session.addCatalog must be the URL of the catalog.")}catalogUserName=arg2;if(catalogUserName&&typeof catalogUserName!=="string"){throw new Error("Second argument to Session.addCatalog must be a user name string.")}catalogPassword=arg3;if(catalogPassword&&typeof catalogPassword!=="string"){throw new Error("Third argument to Session.addCatalog must be a password string.")}}}else{throw new Error("Session.addCatalog is missing its first argument, the URL of the catalog.")}if(!authProvider){authProvider=this._authProvider;customCredentials=false}if(!catalogUserName){catalogUserName=this.userName}if(!catalogPassword){catalogPassword=_password}xhr=new XMLHttpRequest;xhr.pdsession=this;xhr._catalogURI=catalogURI;if(progress.data.ServicesManager.getSession(catalogURI)!==undefined){if(isAsync){xhr._jsdosession=jsdosession;xhr._deferred=deferred;xhr._catalogIndex=catalogIndex;setTimeout(this._addCatalogComplete,10,this,progress.data.Session.CATALOG_ALREADY_LOADED,null,xhr);return progress.data.Session.ASYNC_PENDING}return progress.data.Session.CATALOG_ALREADY_LOADED}if(authProvider){authProvider._openRequestAndAuthorize(xhr,"GET",catalogURI,isAsync,addCatalogAfterOpen);return progress.data.Session.ASYNC_PENDING}else{this._setXHRCredentials(xhr,"GET",catalogURI,catalogUserName,catalogPassword,isAsync);return addCatalogAfterOpen()}};this._processAddCatalogResult=function(xhr){var _catalogHttpStatus=xhr.status;var theSession=xhr.pdsession;var servicedata;var catalogURI=xhr._catalogURI,serviceURL,theJSDOSession=jsdosession;if(!customCredentials){toggleOnlineState(xhr)}if((_catalogHttpStatus===200||_catalogHttpStatus===0)&&xhr.responseText){servicedata=theSession._parseCatalog(xhr);try{progress.data.ServicesManager.addCatalog(servicedata,theSession)}catch(e){if(progress.data.ServicesManager.getSession(catalogURI)!==undefined){return progress.data.Session.CATALOG_ALREADY_LOADED}throw new Error("Error processing catalog '"+catalogURI+"'. \n"+e.message)}servicedata.forEach(function(service){serviceURL=theSession._prependAppURL(service.address);pushService(new progress.data.MobileServiceObject({name:service.name,uri:serviceURL}),theSession);if(service.settings&&service.settings.useXClientProps&&!theSession.xClientProps){console.warn("Catalog warning: Service settings property 'useXClientProps' "+"is true but 'xClientProps' property has not been set.")}});pushCatalogURIs(catalogURI,theSession);progress.data.ServicesManager.addSession(catalogURI,theSession);if(theJSDOSession){progress.data.ServicesManager.addJSDOSession(catalogURI,theJSDOSession)}}else if(_catalogHttpStatus===401){return progress.data.AuthenticationProvider._getAuthFailureReason(xhr)}else if(xhr._iosTimeOutExpired){throw new Error(progress.data._getMsgText("jsdoMSG047","addCatalog"))}else{throw new Error("Error retrieving catalog '"+catalogURI+"'. Http status: "+_catalogHttpStatus+".")}return progress.data.Session.SUCCESS};this._addCatalogComplete=function(pdsession,result,errObj,xhr){pdsession.trigger("afterAddCatalog",pdsession,result,errObj,xhr)};this.ping=function(args){var pingResult=false,pingArgs={pingURI:null,async:true,onCompleteFn:null,fireEventIfOfflineChange:true,onReadyStateFn:this._onReadyStateChangePing,offlineReason:null};if(this._isInvalidated){throw new Error(progress.data._getMsgText("jsdoMSG510","Session"))}if(!this._authProvider&&this.loginResult!==progress.data.Session.LOGIN_SUCCESS){throw new Error("Attempted to call ping when not logged in.")}if(args){if(args.async!==undefined){pingArgs.async=args.async}if(args.doNotFireEvent!==undefined){pingArgs.fireEventIfOfflineChange=!args.doNotFireEvent}if(args.onCompleteFn&&typeof args.onCompleteFn==="function"){pingArgs.onCompleteFn=args.onCompleteFn}pingArgs.deferred=args.deferred;pingArgs.jsdosession=args.jsdosession}pingArgs.pingURI=that._makePingURI();that._sendPing(pingArgs);if(!pingArgs.async){if(pingArgs.xhr){pingResult=that._processPingResult(pingArgs);if(args.offlineReason!==undefined){args.offlineReason=pingArgs.offlineReason}}else{pingResult=false}if(args.xhr!==undefined){args.xhr=pingArgs.xhr}}return pingResult};this._isOnlineStateChange=function(isOnline){var stateChanged=false;if(isOnline&&!this.connected){stateChanged=true}else if(!isOnline&&this.connected){stateChanged=true}return stateChanged};this._checkServiceResponse=function(xhr,success,request){var offlineReason=null,wasOnline=this.connected;updateContextPropsFromResponse(this,xhr);if(!this._events){return}var offlineObservers=this._events.offline||[];var onlineObservers=this._events.online||[];if(offlineObservers.length===0&&onlineObservers.length===0){return}if(success){setRestApplicationIsOnline(true);setDeviceIsOnline(true)}else{if(deviceIsOnline){var localPingArgs={doNotFireEvent:true,offlineReason:null,async:false};if(!that.ping(localPingArgs)){offlineReason=localPingArgs.offlineReason;setRestApplicationIsOnline(false)}else{setRestApplicationIsOnline(true)}}}if(wasOnline&&!this.connected){this.trigger("offline",this,offlineReason,request)}else if(!wasOnline&&this.connected){this.trigger("online",this,request)}};this._processPingResult=function(args){var xhr=args.xhr,pingResponseJSON,appServerStatus=null,wasOnline=this.connected,connectedBeforeCallback,assumeOepingFormat;if(args.hasOwnProperty("usingOepingFormat")){assumeOepingFormat=args.usingOepingFormat}else{assumeOepingFormat=oepingAvailable}if(xhr.status>=200&&xhr.status<300){updateContextPropsFromResponse(this,xhr);if(assumeOepingFormat){try{pingResponseJSON=JSON.parse(xhr.responseText);appServerStatus=pingResponseJSON.AppServerStatus}catch(e){console.error("Unable to parse ping response.")}}toggleOnlineState(xhr)}else{if(deviceIsOnline){if(xhr.status===0){args.offlineReason=progress.data.Session.SERVER_OFFLINE;setRestApplicationIsOnline(false)}else if(xhr.status===404||xhr.status===410){args.offlineReason=progress.data.Session.WEB_APPLICATION_OFFLINE;setRestApplicationIsOnline(false)}else{setRestApplicationIsOnline(true)}}else{args.offlineReason=progress.data.Session.DEVICE_OFFLINE}}if(appServerStatus){if(appServerStatus.PingStatus==="false"){args.offlineReason=progress.data.Session.APPSERVER_OFFLINE;setRestApplicationIsOnline(false)}else{setRestApplicationIsOnline(true)}}connectedBeforeCallback=this.connected;if(typeof xhr.onCompleteFn==="function"){xhr.onCompleteFn({pingResult:this.connected,xhr:xhr,offlineReason:args.offlineReason})}if(args.fireEventIfOfflineChange){if(wasOnline&&!connectedBeforeCallback){that.trigger("offline",that,args.offlineReason,null)}else if(!wasOnline&&connectedBeforeCallback){that.trigger("online",that,null)}}return this.connected};this._onReadyStateChangePing=function(){var xhr=this;var args;if(xhr.readyState===4){args={xhr:xhr,fireEventIfOfflineChange:true,offlineReason:null};that._processPingResult(args);if(_pingInterval>0){_timeoutID=setTimeout(that._autoping,_pingInterval)}}};this._pingtestOnReadyStateChange=function(){var xhr=this;if(xhr.readyState===4){var foundOeping=false;if(xhr.status>=200&&xhr.status<300){foundOeping=true}else{setPartialPingURI(that.loginTarget);console.warn("Default ping target not available, will use loginTarget instead.")}setOepingAvailable(foundOeping);if(_pingInterval>0){_timeoutID=setTimeout(that._autoping,_pingInterval)}}};this._sendPing=function(args){var xhr=new XMLHttpRequest,that=this;function sendPingAfterOpen(){if(args.async){xhr.onreadystatechange=args.onReadyStateFn;xhr.onCompleteFn=args.onCompleteFn;xhr._jsdosession=jsdosession;xhr._deferred=args.deferred}progress.data.Session._setNoCacheHeaders(xhr);setRequestHeaderFromContextProps(that,xhr);if(that.authenticationModel===progress.data.Session.AUTH_TYPE_FORM){_addWithCredentialsAndAccept(xhr,"application/json,text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")}xhr.send(null)}try{if(this._authProvider){this._authProvider._openRequestAndAuthorize(xhr,"GET",args.pingURI,args.async,sendPingAfterOpen)}else{this._setXHRCredentials(xhr,"GET",args.pingURI,this.userName,_password,args.async);if(xhr.readyState===1){sendPingAfterOpen()}}}catch(e){args.error=e}args.xhr=xhr};this._makePingURI=function(){var pingURI=this.serviceURI+partialPingURI;if(progress.data.Session._useTimeStamp){pingURI=progress.data.Session._addTimeStampToURL(pingURI)}return pingURI};this._autoping=function(){that.ping({async:true})};this._setXHRCredentials=function(xhr,verb,uri,userName,password,async){if(userName&&this.authenticationModel===progress.data.Session.AUTH_TYPE_BASIC){if(canPassCredentialsToOpen()){xhr.open(verb,uri,async,userName,password)}else{xhr.open(verb,uri,async)}var auth=_make_basic_auth(userName,password);xhr.setRequestHeader("Authorization",auth)}else{xhr.open(verb,uri,async)}};this._addCCIDtoURL=function(url){var urlPart1,urlPart2,jsessionidStr,index;if(this.clientContextId&&this.clientContextId!=="0"){if(url.substring(0,this.serviceURI.length)===this.serviceURI){jsessionidStr=";"+"JSESSIONID="+this.clientContextId;index=url.indexOf("?");if(index===-1){url+=jsessionidStr}else{urlPart1=url.substring(0,index);urlPart2=url.substring(index);url=urlPart1+jsessionidStr+urlPart2}}}return url};this._saveClientContextId=function(xhr){setClientContextIDfromXHR(xhr,this)};this._parseCatalog=function(xhr){var jsonObject;var catalogdata;try{jsonObject=JSON.parse(xhr.responseText);catalogdata=jsonObject.services}catch(e){console.error("Unable to parse response. Make sure catalog has correct format.");catalogdata=null}return catalogdata};this._prependAppURL=function(oldURL){if(!oldURL){return this.serviceURI}var newURL=oldURL;var pat=/^https?:\/\//i;if(!pat.test(newURL)){if(newURL.indexOf("/")!==0){newURL="/"+newURL}newURL=this.serviceURI+newURL}return newURL};function _addWithCredentialsAndAccept(xhr,acceptString){try{xhr.withCredentials=true;xhr.setRequestHeader("Accept",acceptString)}catch(e){}}function _make_basic_auth(user,pw){var tok=user+":"+pw;var hash=btoa(tok);return"Basic "+hash}var loginFormIDString="j_spring_security_check";function _gotLoginForm(xhr){return _findStringInResponseHTML(xhr,loginFormIDString)}var loginFailureIdentificationString="login failed";function _gotLoginFailure(xhr){return _findStringInResponseHTML(xhr,loginFailureIdentificationString)}function _findStringInResponseHTML(xhr,searchString){if(!xhr.responseText){return false}var contentType=xhr.getResponseHeader("Content-Type");if(contentType&&contentType.indexOf("text/html")>=0&&xhr.responseText.indexOf(searchString)>=0){return true}return false}function handleJSONLoginResponse(params){var jsonObject;params.statusFromjson=null;try{jsonObject=JSON.parse(params.xhr.responseText);if(jsonObject.status_code!==undefined&&jsonObject.status_txt!==undefined){params.statusFromjson=jsonObject.status_code}}catch(e){setLoginResult(progress.data.Session.LOGIN_GENERAL_FAILURE,params.session);setLoginHttpStatus(params.xhr.status,params.session);throw new Error("Unable to parse login response from server.")}}function setRequestHeaderFromContextProps(session,xhr){if(session.xClientProps){xhr.setRequestHeader("X-CLIENT-PROPS",session.xClientProps)}else if(session._contextProperties.contextHeader!==undefined){xhr.setRequestHeader("X-CLIENT-PROPS",session._contextProperties.contextHeader)}}function toggleOnlineState(xhr){var pdsession=that;setLoginHttpStatus(xhr.status,pdsession);if(pdsession.loginHttpStatus>=200&&pdsession.loginHttpStatus<400){setLoginResult(progress.data.Session.LOGIN_SUCCESS,pdsession);setRestApplicationIsOnline(true);pdsession._saveClientContextId(xhr);storeAllSessionInfo()}else{if(pdsession.loginHttpStatus===0||pdsession.loginHttpStatus===400||pdsession.loginHttpStatus===410){setRestApplicationIsOnline(false);setLoginResult(progress.data.AuthenticationProvider._getAuthFailureReason(xhr),pdsession)}else{setRestApplicationIsOnline(true);setLoginResult(progress.data.Session.LOGIN_GENERAL_FAILURE,pdsession)}}setLastSessionXHR(xhr,pdsession);updateContextPropsFromResponse(pdsession,xhr);return pdsession.loginResult}function updateContextPropsFromResponse(session,xhr){var contextString,context;if(xhr){contextString=getResponseHeaderNoError(xhr,"X-CLIENT-PROPS");if(contextString){try{context=JSON.parse(contextString)}catch(e){}if(typeof context==="object"){session._contextProperties.setContext(context)}else{throw new Error(progress.data._getMsgText("jsdoMSG123","Session","X-CLIENT-PROPS"))}}else if(contextString===""){session._contextProperties.setContext({})}}}function cleanServicesManager(){progress.data.ServicesManager.cleanSession(that)}if(typeof options==="object"){jsdosession=options.jsdosession;newURI=options.serviceURI;setAuthProvider(options.authProvider);if(options.authProvider&&options.authProvider.hasClientCredentials()){_loginResult=progress.data.Session.LOGIN_SUCCESS}if(newURI&&newURI[newURI.length-1]==="/"){newURI=newURI.substring(0,newURI.length-1)}_storageKey=options._storageKey;if(_storageKey){if(retrieveSessionInfo(_storageKey)){storedAuthModel=retrieveSessionInfo("authenticationModel");storedURI=retrieveSessionInfo("serviceURI");if(storedAuthModel!==options.authenticationModel||storedURI!==newURI){clearAllSessionInfo()}else{setSessionInfoFromStorage(_storageKey);stateWasReadFromStorage=true}}if(options.authenticationModel===progress.data.Session.AUTH_TYPE_BASIC){_storageKey=undefined}}if(!stateWasReadFromStorage){if(newURI){setServiceURI(newURI,this)}if(options.authenticationModel){this.authenticationModel=options.authenticationModel}}}};progress.data.Session._useTimeStamp=true;var SEQ_MAX_VALUE=999999999999999;var _tsseq=SEQ_MAX_VALUE;var _tsprefix1=0;var _tsprefix2=0;progress.data.Session._getNextTimeStamp=function(){var seq;_tsseq+=1;seq=_tsseq;if(seq>=SEQ_MAX_VALUE){_tsseq=1;seq=1;var t=Math.floor((Date.now?Date.now():(new Date).getTime())/1e4);if(_tsprefix1===t){_tsprefix2+=1;if(_tsprefix2>=SEQ_MAX_VALUE){_tsprefix2=1}}else{_tsprefix1=t;Math.random();_tsprefix2=Math.round(Math.random()*1e10)}}return _tsprefix1+"-"+_tsprefix2+"-"+seq};progress.data.Session._addTimeStampToURL=function(url){var timeStamp="_ts="+progress.data.Session._getNextTimeStamp();url+=(url.indexOf("?")===-1?"?":"&")+timeStamp;return url};progress.data.Session._setNoCacheHeaders=function(xhr){xhr.setRequestHeader("Cache-Control","no-cache");xhr.setRequestHeader("Pragma","no-cache")};if(typeof Object.defineProperty==="function"){Object.defineProperty(progress.data.Session,"LOGIN_AUTHENTICATION_REQUIRED",{value:0,enumerable:true});Object.defineProperty(progress.data.Session,"LOGIN_SUCCESS",{value:1,enumerable:true});Object.defineProperty(progress.data.Session,"LOGIN_AUTHENTICATION_FAILURE",{value:2,enumerable:true});Object.defineProperty(progress.data.Session,"LOGIN_GENERAL_FAILURE",{value:3,enumerable:true});Object.defineProperty(progress.data.Session,"CATALOG_ALREADY_LOADED",{value:4,enumerable:true});Object.defineProperty(progress.data.Session,"ASYNC_PENDING",{value:5,enumerable:true});Object.defineProperty(progress.data.Session,"EXPIRED_TOKEN",{value:6,enumerable:true});Object.defineProperty(progress.data.Session,"SUCCESS",{value:1,enumerable:true});Object.defineProperty(progress.data.Session,"AUTHENTICATION_FAILURE",{value:2,enumerable:true});Object.defineProperty(progress.data.Session,"GENERAL_FAILURE",{value:3,enumerable:true});Object.defineProperty(progress.data.Session,"AUTH_TYPE_ANON",{value:"anonymous",enumerable:true});Object.defineProperty(progress.data.Session,"AUTH_TYPE_BASIC",{value:"basic",enumerable:true});Object.defineProperty(progress.data.Session,"AUTH_TYPE_FORM",{value:"form",enumerable:true});Object.defineProperty(progress.data.Session,"AUTH_TYPE_SSO",{value:"sso",enumerable:true});Object.defineProperty(progress.data.Session,"AUTH_TYPE_FORM_SSO",{value:"form_sso",enumerable:true});Object.defineProperty(progress.data.Session,"DEVICE_OFFLINE",{value:"Device is offline",enumerable:true});Object.defineProperty(progress.data.Session,"SERVER_OFFLINE",{value:"Cannot contact server",enumerable:true});Object.defineProperty(progress.data.Session,"WEB_APPLICATION_OFFLINE",{value:"Mobile Web Application is not available",enumerable:true});Object.defineProperty(progress.data.Session,"SERVICE_OFFLINE",{value:"REST web Service is not available",enumerable:true});Object.defineProperty(progress.data.Session,"APPSERVER_OFFLINE",{value:"AppServer is not available",enumerable:true})}else{progress.data.Session.LOGIN_SUCCESS=1;progress.data.Session.LOGIN_AUTHENTICATION_FAILURE=2;progress.data.Session.LOGIN_GENERAL_FAILURE=3;progress.data.Session.CATALOG_ALREADY_LOADED=4;progress.data.Session.SUCCESS=1;progress.data.Session.AUTHENTICATION_FAILURE=2;progress.data.Session.GENERAL_FAILURE=3;progress.data.Session.AUTH_TYPE_ANON="anonymous";progress.data.Session.AUTH_TYPE_BASIC="basic";progress.data.Session.AUTH_TYPE_FORM="form";progress.data.Session.AUTH_TYPE_SSO="sso"}progress.data.Session.prototype=new progress.util.Observable;progress.data.Session.prototype.constructor=progress.data.Session;function validateSessionSubscribe(args,evt,listenerData){listenerData.operation=undefined;var found=false;this._eventNames.forEach(function(eventName){if(evt===eventName.toLowerCase()){found=true}});if(!found){throw new Error(progress.data._getMsgText("jsdoMSG042",evt))}if(args.length<2){throw new Error(progress.data._getMsgText("jsdoMSG038",2))}if(typeof args[0]!=="string"){throw new Error(progress.data._getMsgText("jsdoMSG039"))}if(typeof args[1]!=="function"){throw new Error(progress.data._getMsgText("jsdoMSG040"))}listenerData.fn=args[1];if(args.length>2){if(typeof args[2]!=="object"){throw new Error(progress.data._getMsgText("jsdoMSG041",evt))}else{listenerData.scope=args[2]}}}progress.data.Session.prototype._eventNames=["offline","online","afterLogin","afterAddCatalog","afterLogout","afterDisconnect"];progress.data.Session.prototype.validateSubscribe=validateSessionSubscribe;progress.data.Session.prototype.toString=function(radix){return"progress.data.Session"};progress.data.JSDOSession=function JSDOSession(options){var _pdsession,_serviceURI,that=this,_name;Object.defineProperty(this,"authenticationModel",{get:function(){return _pdsession?_pdsession.authenticationModel:undefined},enumerable:true});Object.defineProperty(this,"authProvider",{get:function(){return _pdsession?_pdsession._authProvider:null},enumerable:true});Object.defineProperty(this,"catalogURIs",{get:function(){return _pdsession?_pdsession.catalogURIs:undefined},enumerable:true});Object.defineProperty(this,"clientContextId",{get:function(){return _pdsession?_pdsession.clientContextId:undefined},enumerable:true});Object.defineProperty(this,"connected",{get:function(){return _pdsession?_pdsession.connected:undefined},enumerable:true});Object.defineProperty(this,"JSDOs",{get:function(){return _pdsession?_pdsession.JSDOs:undefined},enumerable:true});Object.defineProperty(this,"loginResult",{get:function(){return _pdsession?_pdsession.loginResult:undefined},enumerable:true});Object.defineProperty(this,"loginHttpStatus",{get:function(){return _pdsession?_pdsession.loginHttpStatus:undefined},enumerable:true});Object.defineProperty(this,"onOpenRequest",{get:function(){return _pdsession?_pdsession.onOpenRequest:undefined},set:function(newval){if(_pdsession){_pdsession.onOpenRequest=newval}},enumerable:true});Object.defineProperty(this,"pingInterval",{get:function(){return _pdsession?_pdsession.pingInterval:undefined},set:function(newval){if(_pdsession){_pdsession.pingInterval=newval}},enumerable:true});Object.defineProperty(this,"services",{get:function(){return _pdsession?_pdsession.services:undefined},enumerable:true});Object.defineProperty(this,"serviceURI",{get:function(){if(_pdsession&&_pdsession.serviceURI){return _pdsession.serviceURI}else{return _serviceURI}},enumerable:true});Object.defineProperty(this,"userName",{get:function(){return _pdsession?_pdsession.userName:undefined},enumerable:true});Object.defineProperty(this,"name",{get:function(){return _name},enumerable:true});Object.defineProperty(this,"_isInvalidated",{get:function(){return _pdsession._isInvalidated},enumerable:false});function settlePromise(promise,fulfill,result,info){if(fulfill){promise.resolve(that,result,info)}else{promise.reject(that,result,info)}}function genericSessionEventHandler(pdsession,result,errorObject,xhr,deferred){var myDeferred;if(xhr){myDeferred=xhr._deferred}else{myDeferred=deferred}settlePromise(myDeferred,result===progress.data.Session.SUCCESS?true:false,result,{errorObject:errorObject,xhr:xhr})}function onAfterAddCatalog(pdsession,result,errorObject,xhr){var deferred,fulfill=false,settleResult,info;if(result===progress.data.Session.EXPIRED_TOKEN){settleResult=progress.data.Session.EXPIRED_TOKEN}else if(result===progress.data.Session.LOGIN_AUTHENTICATION_FAILURE){settleResult=progress.data.Session.LOGIN_AUTHENTICATION_FAILURE}else{settleResult=progress.data.Session.GENERAL_FAILURE}if(xhr&&xhr._deferred){deferred=xhr._deferred;if(result!==progress.data.Session.SUCCESS&&result!==progress.data.Session.CATALOG_ALREADY_LOADED){result=result||progress.data.Session.GENERAL_FAILURE;deferred._overallCatalogResult=progress.data.Session.GENERAL_FAILURE}deferred._results[xhr._catalogIndex]={catalogURI:xhr._catalogURI,result:result,errorObject:errorObject,xhr:xhr};deferred._numCatalogsProcessed+=1;if(deferred._numCatalogsProcessed===deferred._numCatalogs){deferred._processedPromise=true;if(!deferred._overallCatalogResult){fulfill=true;settleResult=progress.data.Session.SUCCESS}if(settleResult===progress.data.Session.SUCCESS){if(xhr._deferred._results.length===1){info=xhr._deferred._results[0]}else{info={xhr:xhr,result:settleResult,details:xhr._deferred._results}}}else{if(xhr._deferred._results.length===1){info=xhr._deferred._results[0]}else{info={xhr:xhr,result:settleResult,errorObject:new Error(progress.data._getMsgText("jsdoMSG512")),details:xhr._deferred._results}}}settlePromise(xhr._deferred,fulfill,settleResult,info)}}}function onAfterLogout(pdsession,errorObject,xhr){var result=progress.data.Session.GENERAL_FAILURE,fulfill=false;if(xhr&&xhr._deferred){if(!errorObject&&!pdsession.loginResult){result=progress.data.Session.SUCCESS;fulfill=true}settlePromise(xhr._deferred,fulfill,result,{errorObject:errorObject,xhr:xhr})}}function onPingComplete(args){var xhr=args.xhr;if(xhr&&xhr._deferred){settlePromise(xhr._deferred,args.pingResult,args.pingResult,{offlineReason:args.offlineReason,xhr:xhr})}}this.login=function(username,password,options){var deferred=new progress.util.Deferred,iOSBasicAuthTimeout;function callIsAuthorized(){that.isAuthorized().then(function(object,result,info){object=progress.util.Deferred.getParamObject(object,result,info);deferred.resolve(that,object.result,object.info)},function(object,result,info){object=progress.util.Deferred.getParamObject(object,result,info);deferred.reject(that,object.result,object.info)})}try{if(this._isInvalidated){throw new Error(progress.data._getMsgText("jsdoMSG510","JSDOSession"))}if(this.authenticationModel===progress.data.Session.AUTH_TYPE_SSO){throw new Error(progress.data._getMsgText("jsdoMSG057","JSDOSession","login()"))}if(typeof options==="object"){iOSBasicAuthTimeout=options.iOSBasicAuthTimeout}if(!_pdsession._authProvider){_pdsession._authProvider=new progress.data.AuthenticationProvider({uri:this.serviceURI,authenticationModel:this.authenticationModel});_pdsession._authProvider.logout().then(function(){return _pdsession._authProvider.login(username,password)}).then(function(){callIsAuthorized()},function(object,result,info){object=progress.util.Deferred.getParamObject(object,result,info);deferred.reject(that,object.result,object.info)})}else{throw new Error(progress.data._getMsgText("jsdoMSG062","JSDOSession","login()"))}}catch(error){if(progress.util.Deferred.useJQueryPromises){throw error}else{deferred.reject(this,progress.data.Session.GENERAL_FAILURE,{errorObject:error})}}return deferred.promise()};this.disconnect=function(){var deferred=new progress.util.Deferred,errorObject;try{_pdsession.subscribe("afterDisconnect",genericSessionEventHandler,this);_pdsession._disconnect(deferred)}catch(e){errorObject=new Error(progress.data._getMsgText("jsdoMSG049","JSDOSession","disconnect",e.message))}if(errorObject){if(progress.util.Deferred.useJQueryPromises){throw errorObject}else{deferred.reject(this,progress.data.Session.GENERAL_FAILURE,{errorObject:errorObject})}}else{return deferred.promise()}};this.addCatalog=function(catalogURI,unameOrOpts,password,opts){var deferred=new progress.util.Deferred,catalogURIs,numCatalogs,catalogIndex,addResult,errorObject,iOSBasicAuthTimeout,username,options,authProvider;try{if(this._isInvalidated){throw new Error(progress.data._getMsgText("jsdoMSG510","JSDOSession"))}if(typeof catalogURI==="string"){catalogURIs=[catalogURI]}else if(catalogURI instanceof Array){catalogURIs=catalogURI}else{throw new Error(progress.data._getMsgText("jsdoMSG033","JSDOSession","addCatalog","The first argument must be a string or an array of strings specifying the URI of the catalog."))}if(unameOrOpts){if(typeof unameOrOpts==="string"){if(this.authenticationModel===progress.data.Session.AUTH_TYPE_SSO){throw new Error(progress.data._getMsgText("jsdoMSG058","Session"))}username=unameOrOpts;if(opts){options=opts;options.authProvider=undefined}}else if(typeof unameOrOpts==="object"){options=unameOrOpts}else{throw new Error(progress.data._getMsgText("jsdoMSG121","JSDOSession","2","object","addCatalog"))}}if(typeof options==="object"){iOSBasicAuthTimeout=options.iOSBasicAuthTimeout;if(options.authProvider){authProvider=options.authProvider}else if(this.authProvider){authProvider=this.authProvider}}if(!authProvider&&!this.authProvider&&!username){throw new Error(progress.data._getMsgText("jsdoMSG511"))}_pdsession.subscribe("afterAddCatalog",onAfterAddCatalog,this);numCatalogs=catalogURIs.length;deferred._numCatalogs=numCatalogs;deferred._numCatalogsProcessed=0;deferred._results=[];deferred._results.length=numCatalogs;for(catalogIndex=0;catalogIndex=200&&xhr.status<300){deferred.resolve(that,progress.data.Session.SUCCESS,info)}else{if(xhr.status===401){cbresult=progress.data.AuthenticationProvider._getAuthFailureReason(xhr)}else{cbresult=progress.data.Session.GENERAL_FAILURE}deferred.reject(that,cbresult,info)}}};try{xhr.send()}catch(e){throw new Error("JSDOSession: Unable to validate authorization. "+e.message)}})}else{result=progress.data.Session.LOGIN_AUTHENTICATION_REQUIRED;deferred.reject(that,result,{xhr:xhr})}}catch(error){if(progress.util.Deferred.useJQueryPromises){throw error}else{deferred.reject(that,progress.data.Session.GENERAL_FAILURE,{errorObject:error})}}return deferred.promise()};this.setContext=function(context){_pdsession._contextProperties.setContext(context)};this.setContextProperty=function(propertyName,propertyValue){_pdsession._contextProperties.setContextProperty(propertyName,propertyValue)};this.getContext=function(){return _pdsession._contextProperties.getContext()};this.getContextProperty=function(propertyName){return _pdsession._contextProperties.getContextProperty(propertyName)};this._onlineHandler=function(session,request){that.trigger("online",that,request)};this._offlineHandler=function(session,offlineReason,request){that.trigger("offline",that,offlineReason,request)};if(arguments.length>0&&typeof arguments[0]==="object"){if(options.serviceURI&&typeof options.serviceURI==="string"){_serviceURI=options.serviceURI}else{throw new Error(progress.data._getMsgText("jsdoMSG033","JSDOSession","the constructor","The options parameter must include a 'serviceURI' property that is a string."))}if(options.authenticationModel){if(typeof options.authenticationModel!=="string"){throw new Error(progress.data._getMsgText("jsdoMSG033","JSDOSession","the constructor","The authenticationModel property of the options parameter must be a string."))}options.authenticationModel=options.authenticationModel.toLowerCase()}else{options.authenticationModel=progress.data.Session.AUTH_TYPE_ANON}if(options.authProvider){if(typeof options.authProvider!=="object"){throw new Error(progress.data._getMsgText("jsdoMSG502","JSDOSession","options","constructor","authProvider"))}if(options.authProvider.authenticationModel!==progress.data.Session.AUTH_TYPE_FORM_SSO&&options.authProvider.authenticationModel!==options.authenticationModel||options.authProvider.authenticationModel===progress.data.Session.AUTH_TYPE_FORM_SSO&&options.authenticationModel!==progress.data.Session.AUTH_TYPE_SSO){throw new Error(progress.data._getMsgText("jsdoMSG059","JSDOSession",options.authProvider.authenticationModel,options.authenticationModel))}if(typeof options.authProvider.hasClientCredentials==="function"){if(!options.authProvider.hasClientCredentials()){throw new Error(progress.data._getMsgText("jsdoMSG125","JSDOSession"))}}else{throw new Error(progress.data._getMsgText("jsdoMSG505","JSDOSession","AuthenticationProvider","hasClientCredentials"))}}else if(options.authenticationModel===progress.data.Session.AUTH_TYPE_SSO){throw new Error(progress.data._getMsgText("jsdoMSG508"))}}else{throw new Error(progress.data._getMsgText("jsdoMSG033","JSDOSession","the constructor","The options argument was missing or invalid."))}_name=options.name;_pdsession=new progress.data.Session({_storageKey:_name,_silent:true,authenticationModel:options.authenticationModel,serviceURI:options.serviceURI,jsdosession:this,authProvider:options.authProvider});try{if(options.context){this.setContext(options.context)}_pdsession.subscribe("online",this._onlineHandler,this);_pdsession.subscribe("offline",this._offlineHandler,this)}catch(err){_pdsession=undefined;throw err}};progress.data.JSDOSession.prototype=new progress.util.Observable;progress.data.JSDOSession.prototype.constructor=progress.data.JSDOSession;function validateJSDOSessionSubscribe(args,evt,listenerData){listenerData.operation=undefined;var found=false;this._eventNames.forEach(function(eventName){if(evt===eventName.toLowerCase()){found=true}});if(!found){throw new Error(progress.data._getMsgText("jsdoMSG042",evt))}if(args.length<2){throw new Error(progress.data._getMsgText("jsdoMSG038",2))}if(typeof args[0]!=="string"){throw new Error(progress.data._getMsgText("jsdoMSG039"))}if(typeof args[1]!=="function"){throw new Error(progress.data._getMsgText("jsdoMSG040"))}listenerData.fn=args[1];if(args.length>2){if(typeof args[2]!=="object"){throw new Error(progress.data._getMsgText("jsdoMSG041",evt))}listenerData.scope=args[2]}}progress.data.JSDOSession.prototype._eventNames=["offline","online"];progress.data.JSDOSession.prototype.validateSubscribe=validateJSDOSessionSubscribe;progress.data.JSDOSession.prototype.toString=function(radix){return"progress.data.JSDOSession"};progress.data.getSession=function(options){var deferred=new progress.util.Deferred,authProvider,promise,authProviderInitObject={};function sessionRejectHandler(object,result,info){object=progress.util.Deferred.getParamObject(object,result,info);if(authProvider&&authProvider.hasClientCredentials()){var callback=function(){deferred.reject(object.result,object.info)};authProvider.logout().then(callback,callback)}else{deferred.reject(object.result,object.info)}}function callbackRejectHandler(reason){deferred.reject(progress.data.Session.GENERAL_FAILURE,{reason:reason})}function loginHandler(object){var jsdosession;try{jsdosession=new progress.data.JSDOSession(options);try{jsdosession.isAuthorized().then(function(){return jsdosession.addCatalog(options.catalogURI)},sessionRejectHandler).then(function(object,result,info){object=progress.util.Deferred.getParamObject(object,result,info);deferred.resolve(object.jsdosession,progress.data.Session.SUCCESS)},sessionRejectHandler)}catch(e){sessionRejectHandler(jsdosession,progress.data.Session.GENERAL_FAILURE,{errorObject:e})}}catch(ex){sessionRejectHandler(jsdosession,progress.data.Session.GENERAL_FAILURE,{errorObject:ex})}}function callLogin(provider){var errorObject;if(typeof options.loginCallback!=="undefined"){options.loginCallback().then(function(result){try{provider.login(result.username,result.password).then(loginHandler,sessionRejectHandler)}catch(e){sessionRejectHandler(provider,progress.data.Session.GENERAL_FAILURE,{errorObject:e})}},callbackRejectHandler)}else if(options.username&&options.password){try{provider.login(options.username,options.password).then(loginHandler,sessionRejectHandler)}catch(e){sessionRejectHandler(provider,progress.data.Session.GENERAL_FAILURE,{errorObject:e})}}else{errorObject=new Error(progress.data._getMsgText("jsdoMSG052","getSession()"));sessionRejectHandler(provider,progress.data.Session.AUTHENTICATION_FAILURE,{errorObject:errorObject})}}if(typeof options!=="object"){throw new Error(progress.data._getMsgText("jsdoMSG503","getSession()","options","object"))}if(typeof options.loginCallback!=="undefined"&&typeof options.loginCallback!=="function"){throw new Error(progress.data._getMsgText("jsdoMSG503","getSession()","options.loginCallback","function"))}try{if(options.authenticationModel===progress.data.Session.AUTH_TYPE_SSO){if(!options.authenticationURI||!options.authProviderAuthenticationModel){throw new Error(progress.data._getMsgText("jsdoMSG509"))}}if(options.authenticationURI){authProviderInitObject.uri=options.authenticationURI;authProviderInitObject.authenticationModel=options.authProviderAuthenticationModel;if(typeof authProviderInitObject.authenticationModel!=="string"){throw new Error(progress.data._getMsgText("jsdoMSG502","progress.data.getSession","object","getSession","authProviderAuthenticationModel"))}}else{authProviderInitObject.uri=options.serviceURI;authProviderInitObject.authenticationModel=options.authenticationModel}authProvider=new progress.data.AuthenticationProvider(authProviderInitObject);options.authProvider=authProvider;if(authProvider.hasClientCredentials()){loginHandler(authProvider)}else{if(authProvider.authenticationModel===progress.data.Session.AUTH_TYPE_ANON){authProvider.login().then(loginHandler,sessionRejectHandler)}else{callLogin(authProvider)}}}catch(error){sessionRejectHandler(null,progress.data.Session.GENERAL_FAILURE,{errorObject:error})}return deferred.promise()};progress.data.invalidateAllSessions=function(){var jsdosession,key,deferred=new progress.util.Deferred,jsdosessions=progress.data.ServicesManager._jsdosessions,invalidatePromises=[];try{for(key in jsdosessions){if(jsdosessions.hasOwnProperty(key)){jsdosession=jsdosessions[key];invalidatePromises.push(jsdosession.invalidate())}}progress.util.Deferred.when(invalidatePromises).then(function(){deferred.resolve(progress.data.Session.SUCCESS)},function(object,result,info){object=progress.util.Deferred.getParamObject(object,result,info);deferred.reject(progress.data.Session.GENERAL_FAILURE,info)})}catch(error){if(progress.util.Deferred.useJQueryPromises){throw error}else{deferred.reject(progress.data.Session.GENERAL_FAILURE,{errorObject:error})}}return deferred.promise()}})();if(typeof exports!=="undefined"){exports.progress=progress}(function(){"use strict";if(typeof progress==="undefined"){progress={}}if(typeof progress.data==="undefined"){progress.data={}}progress.data.AuthenticationProvider=function AuthenticationProvider(initObject){var authProv,authModel,uri;if(typeof initObject==="object"){this._checkStringArg("constructor",initObject.authenticationModel,"initObject.authenticationModel","initObject.authenticationModel");this._checkStringArg("constructor",initObject.uri,"init-object.uri","init-object.uri")}else{throw new Error(progress.data._getMsgText("jsdoMSG033","AuthenticationProvider","the constructor","The init-object argument was missing or invalid."))}authModel=initObject.authenticationModel.toLowerCase();switch(authModel){case progress.data.Session.AUTH_TYPE_ANON:this._initialize(initObject.uri,progress.data.Session.AUTH_TYPE_ANON,{_loginURI:progress.data.AuthenticationProvider._homeLoginURIBase});authProv=this;break;case progress.data.Session.AUTH_TYPE_BASIC:authProv=new progress.data.AuthenticationProviderBasic(initObject.uri);break;case progress.data.Session.AUTH_TYPE_FORM:authProv=new progress.data.AuthenticationProviderForm(initObject.uri);break;case progress.data.Session.AUTH_TYPE_FORM_SSO:authProv=new progress.data.AuthenticationProviderSSO(initObject.uri);break;default:throw new Error(progress.data._getMsgText("jsdoMSG502","AuthenticationProvider","init-object","constructor","authenticationModel"))}return authProv};progress.data.AuthenticationProvider.prototype._loginProto=function(sendParam){var deferred=new progress.util.Deferred,xhr,uriForRequest,header,that=this;try{if(this._loggedIn){throw new Error(progress.data._getMsgText("jsdoMSG051","AuthenticationProvider"))}xhr=new XMLHttpRequest;xhr.onreadystatechange=function(){if(xhr.readyState===4){that._processLoginResult(xhr,deferred)}};if(progress.data.Session._useTimeStamp){uriForRequest=progress.data.Session._addTimeStampToURL(this._loginURI)}else{uriForRequest=this._loginURI}this._openLoginRequest(xhr,uriForRequest);xhr.setRequestHeader("Accept","application/json");xhr.send(sendParam)}catch(error){if(progress.util.Deferred.useJQueryPromises){throw error}else{deferred.reject(this,progress.data.Session.GENERAL_FAILURE,{errorObject:error})}}return deferred.promise()};progress.data.AuthenticationProvider.prototype.login=function(){return this._loginProto()};progress.data.AuthenticationProvider.prototype._openLoginRequest=function(xhr,uri){xhr.open("GET",uri,true);progress.data.Session._setNoCacheHeaders(xhr)};progress.data.AuthenticationProvider.prototype._processLoginResult=function(xhr,deferred){var result;if(xhr.status===200){this._loggedIn=true;this._storeInfo();result=progress.data.Session.SUCCESS}else if(xhr.status===401){result=progress.data.Session.AUTHENTICATION_FAILURE}else{result=progress.data.Session.GENERAL_FAILURE}this._settlePromise(deferred,result,{xhr:xhr})};progress.data.AuthenticationProvider.prototype.logout=function(){var deferred=new progress.util.Deferred;try{this._reset();deferred.resolve(this,progress.data.Session.SUCCESS,{})}catch(error){if(progress.util.Deferred.useJQueryPromises){throw error}else{deferred.reject(this,progress.data.Session.GENERAL_FAILURE,{errorObject:error})}}return deferred.promise()};progress.data.AuthenticationProvider.prototype.hasClientCredentials=function(){return this._loggedIn};progress.data.AuthenticationProvider.prototype.hasRefreshToken=function(){return false};progress.data.AuthenticationProvider.prototype._openRequestAndAuthorize=function(xhr,verb,uri,async,callback){var errorObject;if(this.hasClientCredentials()){xhr.open(verb,uri,async);xhr.setRequestHeader("Accept","application/json");callback(xhr)}else{errorObject=new Error(progress.data._getMsgText("jsdoMSG125","AuthenticationProvider"));callback(errorObject)}};progress.data.AuthenticationProvider.prototype._initialize=function(uriParam,authModel,targetURIs){var tempURI,target;Object.defineProperty(this,"uri",{get:function(){return this._uri},enumerable:true});Object.defineProperty(this,"authenticationModel",{get:function(){return this._authenticationModel},enumerable:true});if(uriParam[uriParam.length-1]==="/"){tempURI=uriParam.substring(0,uriParam.length-1)}else{tempURI=uriParam}for(target in targetURIs){if(targetURIs.hasOwnProperty(target)){this[target]=tempURI+targetURIs[target]}}this._authenticationModel=authModel;this._uri=uriParam;this._loggedIn=false;this._dataKeys={uri:".uri",loggedIn:".loggedIn"};if(typeof sessionStorage==="undefined"){throw new Error(progress.data._getMsgText("jsdoMSG126","AuthenticationProvider","sessionStorage"))}this._storage=sessionStorage;this._storageKey=this._uri;this._dataKeys.uri=this._storageKey+this._dataKeys.uri;this._dataKeys.loggedIn=this._storageKey+this._dataKeys.loggedIn;if(this._retrieveLoggedIn()){this._loggedIn=true}};progress.data.AuthenticationProvider.prototype._storeInfo=function(){this._storage.setItem(this._dataKeys.uri,JSON.stringify(this._uri));this._storage.setItem(this._dataKeys.loggedIn,JSON.stringify(this._loggedIn))};progress.data.AuthenticationProvider.prototype._retrieveInfoItem=function(propName){var jsonStr=this._storage.getItem(propName),value=null;if(jsonStr!==null){try{value=JSON.parse(jsonStr)}catch(e){value=null}}return value};progress.data.AuthenticationProvider.prototype._retrieveURI=function(){return this._retrieveInfoItem(this._dataKeys.uri)};progress.data.AuthenticationProvider.prototype._retrieveLoggedIn=function(){return this._retrieveInfoItem(this._dataKeys.loggedIn)};progress.data.AuthenticationProvider.prototype._clearInfo=function(info){this._storage.removeItem(this._dataKeys.uri);this._storage.removeItem(this._dataKeys.loggedIn)};progress.data.AuthenticationProvider.prototype._reset=function(){this._clearInfo();this._loggedIn=false};progress.data.AuthenticationProvider.prototype._settlePromise=function(deferred,result,info){if(result===progress.data.Session.SUCCESS){deferred.resolve(this,result,info)}else{deferred.reject(this,result,info)}};progress.data.AuthenticationProvider.prototype._checkStringArg=function(fnName,argToCheck,argPosition,argName){if(typeof argToCheck!=="string"){throw new Error(progress.data._getMsgText("jsdoMSG121","AuthenticationProvider",argPosition,"string",fnName))}else if(argToCheck.length===0){throw new Error(progress.data._getMsgText("jsdoMSG501","AuthenticationProvider",argName,fnName))}};progress.data.AuthenticationProvider._getAuthFailureReason=function(xhr){var contentType,jsonObject,result=progress.data.Session.AUTHENTICATION_FAILURE;if(xhr.status===401){contentType=xhr.getResponseHeader("Content-Type");if(contentType&&contentType.indexOf("application/json")>-1&&xhr.responseText){jsonObject=JSON.parse(xhr.responseText);if(jsonObject.error==="sso.token.expired_token"){result=progress.data.Session.EXPIRED_TOKEN}}}else{result=null}return result};Object.defineProperty(progress.data.AuthenticationProvider,"_homeLoginURIBase",{value:"/static/home.html",enumerable:true});Object.defineProperty(progress.data.AuthenticationProvider,"_springLoginURIBase",{value:"/static/auth/j_spring_security_check",enumerable:true});Object.defineProperty(progress.data.AuthenticationProvider,"_springLogoutURIBase",{value:"/static/auth/j_spring_security_logout",enumerable:true});Object.defineProperty(progress.data.AuthenticationProvider,"_springFormTokenLoginURIBase",{value:progress.data.AuthenticationProvider._springLoginURIBase+"?OECP=yes",enumerable:true});Object.defineProperty(progress.data.AuthenticationProvider,"_springFormTokenRefreshURIBase",{value:"/static/auth/token?op=refresh",enumerable:true})})();(function(){"use strict";progress.data.AuthenticationProviderBasic=function(uri){var defaultiOSBasicAuthTimeout,userName=null,password=null,fn;this._initialize(uri,progress.data.Session.AUTH_TYPE_BASIC,{_loginURI:progress.data.AuthenticationProvider._homeLoginURIBase});this._reset();function make_basic_auth_header(user,pw){var tok=user+":"+pw,hash=btoa(tok);return"Basic "+hash}this._reset=function(){userName=null;password=null;progress.data.AuthenticationProviderBasic.prototype._reset.apply(this)};this._openLoginRequest=function(xhr,uri){var auth;xhr.open("GET",uri,true);if(userName){auth=make_basic_auth_header(userName,password);xhr.setRequestHeader("Authorization",auth)}progress.data.Session._setNoCacheHeaders(xhr)};this._processLoginResult=function _basic_processLoginResult(xhr,deferred){progress.data.AuthenticationProviderBasic.prototype._processLoginResult.apply(this,[xhr,deferred]);if(!this._loggedIn){userName=null;password=null}};this.login=function(userNameParam,passwordParam){this._checkStringArg("login",userNameParam,1,"userName");this._checkStringArg("login",passwordParam,2,"password");userName=userNameParam;password=passwordParam;return this._loginProto()};this._openRequestAndAuthorize=function(xhr,verb,uri,async,callback){var auth,errorObject;if(this.hasClientCredentials()){xhr.open(verb,uri,async);if(userName){auth=make_basic_auth_header(userName,password);xhr.setRequestHeader("Authorization",auth)}progress.data.Session._setNoCacheHeaders(xhr);callback(xhr)}else{errorObject=new Error(progress.data._getMsgText("jsdoMSG125","AuthenticationProvider"));callback(errorObject)}}};function BasicProxy(){}BasicProxy.prototype=progress.data.AuthenticationProvider.prototype;progress.data.AuthenticationProviderBasic.prototype=new BasicProxy;progress.data.AuthenticationProviderBasic.prototype.constructor=progress.data.AuthenticationProviderBasic})();(function(){"use strict";var fn;progress.data.AuthenticationProviderForm=function(uri){this._initialize(uri,progress.data.Session.AUTH_TYPE_FORM,{_loginURI:progress.data.AuthenticationProvider._springLoginURIBase,_logoutURI:progress.data.AuthenticationProvider._springLogoutURIBase})};function FormProxy(){}FormProxy.prototype=progress.data.AuthenticationProvider.prototype;progress.data.AuthenticationProviderForm.prototype=new FormProxy;progress.data.AuthenticationProviderForm.prototype.constructor=progress.data.AuthenticationProviderForm;progress.data.AuthenticationProviderForm.prototype.login=function(userNameParam,passwordParam){var deferred=new progress.util.Deferred,xhr,that=this;this._checkStringArg("login",userNameParam,1,"userName");this._checkStringArg("login",passwordParam,2,"password");return this._loginProto("j_username="+encodeURIComponent(userNameParam)+"&j_password="+encodeURIComponent(passwordParam)+"&submit=Submit")};progress.data.AuthenticationProviderForm.prototype._openLoginRequest=function(xhr,uri){xhr.open("POST",uri,true);xhr.setRequestHeader("Cache-Control","max-age=0");xhr.setRequestHeader("Pragma","no-cache");xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");xhr.withCredentials=true};progress.data.AuthenticationProviderForm.prototype.logout=function(){var deferred=new progress.util.Deferred,xhr,that=this;try{if(!this._loggedIn){deferred.resolve(this,progress.data.Session.SUCCESS,{})}else{xhr=new XMLHttpRequest;this._openLogoutRequest(xhr);xhr.onreadystatechange=function(){if(xhr.readyState===4){that._processLogoutResult(xhr,deferred)}};xhr.send()}this._reset()}catch(error){if(progress.util.Deferred.useJQueryPromises){throw error}else{deferred.reject(this,progress.data.Session.GENERAL_FAILURE,{errorObject:error})}}return deferred.promise()};progress.data.AuthenticationProviderForm.prototype._openLogoutRequest=function(xhr){xhr.open("GET",this._logoutURI,true);xhr.setRequestHeader("Cache-Control","max-age=0");xhr.withCredentials=true;xhr.setRequestHeader("Accept","application/json")};progress.data.AuthenticationProviderForm.prototype._processLogoutResult=function(xhr,deferred){var result;if(xhr.status===200){result=progress.data.Session.SUCCESS}else if(xhr.status===401){result=progress.data.Session.SUCCESS}else{result=progress.data.Session.GENERAL_FAILURE}this._settlePromise(deferred,result,{xhr:xhr})};fn=progress.data.AuthenticationProviderForm.prototype._openRequestAndAuthorize;progress.data.AuthenticationProviderForm.prototype._openRequestAndAuthorize=function(xhr,verb,uri,async,callback){function afterSuper(errorObject){if(errorObject instanceof Error){callback(errorObject)}else{xhr.withCredentials=true;callback(xhr)}}try{progress.data.AuthenticationProviderForm.prototype._openRequestAndAuthorize._super.apply(this,[xhr,verb,uri,async,afterSuper])}catch(e){callback(e)}};progress.data.AuthenticationProviderForm.prototype._openRequestAndAuthorize._super=fn})();(function(){"use strict";var fn;progress.data.AuthenticationProviderSSO=function(uri){var that=this,_automaticTokenRefresh,temp,ssoTokenInfo=null,tokenDataKeys={token:".access_token",refreshToken:".refresh_token",tokenType:".token_type",expiration:".expires_in",accessTokenExpiration:".accessTokenExpiration"};function storeTokenInfo(info){var date,accessTokenExpiration;if(info.access_token.length){that._storage.setItem(tokenDataKeys.token,JSON.stringify(info.access_token))}if(info.refresh_token.length){that._storage.setItem(tokenDataKeys.refreshToken,JSON.stringify(info.refresh_token));date=new Date;accessTokenExpiration=date.getTime()+info.expires_in*1e3*.75;that._storage.setItem(tokenDataKeys.accessTokenExpiration,JSON.stringify(accessTokenExpiration))}else{that._storage.removeItem(tokenDataKeys.refreshToken);that._storage.removeItem(tokenDataKeys.accessTokenExpiration)}that._storage.setItem(tokenDataKeys.tokenType,JSON.stringify(info.token_type));that._storage.setItem(tokenDataKeys.expiration,JSON.stringify(info.expires_in))}function retrieveTokenProperty(propName){var jsonStr=that._storage.getItem(propName),value=null;if(jsonStr!==null){try{value=JSON.parse(jsonStr)}catch(e){value=null}}return value}function retrieveToken(){return retrieveTokenProperty(tokenDataKeys.token)}function retrieveRefreshToken(){return retrieveTokenProperty(tokenDataKeys.refreshToken)}function retrieveAccessTokenExpiration(){return retrieveTokenProperty(tokenDataKeys.accessTokenExpiration)}function retrieveTokenType(){return retrieveTokenProperty(tokenDataKeys.tokenType)}function getToken(){return retrieveToken()}function retrieveExpiration(){return retrieveTokenProperty(tokenDataKeys.expiration)}function clearTokenInfo(info){that._storage.removeItem(tokenDataKeys.token);that._storage.removeItem(tokenDataKeys.refreshToken);that._storage.removeItem(tokenDataKeys.tokenType);that._storage.removeItem(tokenDataKeys.expiration);that._storage.removeItem(tokenDataKeys.accessTokenExpiration)}function openRefreshRequest(xhr){xhr.open("POST",that._refreshURI,true);xhr.setRequestHeader("Cache-Control","max-age=0");xhr.withCredentials=true;xhr.setRequestHeader("Content-Type","application/json");xhr.setRequestHeader("Accept","application/json")}function processRefreshResult(xhr,deferred){var errorObject,result,ssoTokenJSON;if(xhr.status===200){try{ssoTokenInfo=JSON.parse(xhr.responseText);if(ssoTokenInfo.access_token){storeTokenInfo(ssoTokenInfo);result=progress.data.Session.SUCCESS}else{result=progress.data.Session.GENERAL_FAILURE;errorObject=new Error(progress.data._getMsgText("jsdoMSG049","AuthenticationProvider","refresh",progress.data._getMsgText("jsdoMSG050")))}}catch(ex){result=progress.data.Session.GENERAL_FAILURE;errorObject=new Error(progress.data._getMsgText("jsdoMSG049","AuthenticationProvider","refresh",ex.message))}}else if(xhr.status===401){that._reset();result=progress.data.Session.AUTHENTICATION_FAILURE}else{result=progress.data.Session.GENERAL_FAILURE}that._settlePromise(deferred,result,{xhr:xhr,errorObject:errorObject})}this._processLoginResult=function(xhr,deferred){var errorObject,result,ssoTokenJSON;if(xhr.status===200){this._loggedIn=true;try{ssoTokenInfo=JSON.parse(xhr.responseText);if(ssoTokenInfo.access_token){storeTokenInfo(ssoTokenInfo);result=progress.data.Session.SUCCESS}else{result=progress.data.Session.GENERAL_FAILURE;errorObject=new Error(progress.data._getMsgText("jsdoMSG049","AuthenticationProvider","login",progress.data._getMsgText("jsdoMSG050")))}}catch(ex){result=progress.data.Session.GENERAL_FAILURE;errorObject=new Error(progress.data._getMsgText("jsdoMSG049","AuthenticationProvider","login",ex.message))}if(result!==progress.data.Session.SUCCESS){var callback=function(params){params=progress.util.Deferred.getParamObject(params);params.provider._settlePromise(deferred,result,{xhr:xhr,errorObject:errorObject})};this.logout().then(callback,callback);return}}else if(xhr.status===401){result=progress.data.Session.AUTHENTICATION_FAILURE}else{result=progress.data.Session.GENERAL_FAILURE}this._settlePromise(deferred,result,{xhr:xhr})};this._reset=function(){progress.data.AuthenticationProviderSSO.prototype._reset.apply(this);clearTokenInfo();ssoTokenInfo=null};this._openRequestAndAuthorize=function(xhr,verb,uri,async,callback){var that=this,date,errorObject;function afterRefreshCheck(provider,result,info){if(result===progress.data.Session.AUTHENTICATION_FAILURE){callback(new Error(progress.data._getMsgText("jsdoMSG060")))}else{progress.data.AuthenticationProviderSSO.prototype._openRequestAndAuthorize.apply(that,[xhr,verb,uri,async,function(errorObject){if(errorObject instanceof Error){callback(errorObject)}else{xhr.setRequestHeader("Authorization","oecp "+getToken());callback(xhr)}}])}}if(this.hasClientCredentials()){date=new Date;if(this.automaticTokenRefresh&&this.hasRefreshToken()&&date.getTime()>retrieveAccessTokenExpiration()){try{var callback=function(params,result,info){params=progress.util.Deferred.getParamObject(params,result,info);afterRefreshCheck(params.provider,params.result,params.info)};this.refresh().then(callback,callback)}catch(e){callback(e)}}else{afterRefreshCheck(this,progress.data.Session.SUCCESS,null)}}else{errorObject=new Error(progress.data._getMsgText("jsdoMSG125","AuthenticationProvider"));callback(errorObject)}};this.hasClientCredentials=function(){return retrieveToken()===null?false:true};this.refresh=function(){var deferred=new progress.util.Deferred,xhr;try{if(!this._loggedIn){throw new Error(progress.data._getMsgText("jsdoMSG053","AuthenticationProvider","refresh"))}if(!this.hasRefreshToken()){throw new Error(progress.data._getMsgText("jsdoMSG054","AuthenticationProvider"))}xhr=new XMLHttpRequest;openRefreshRequest(xhr);xhr.onreadystatechange=function(){if(xhr.readyState===4){processRefreshResult(xhr,deferred)}};xhr.send('{"token_type":"'+retrieveTokenType()+'","refresh_token":"'+retrieveRefreshToken()+'"}')}catch(error){if(progress.util.Deferred.useJQueryPromises){throw error}else{deferred.reject(this,progress.data.Session.GENERAL_FAILURE,{errorObject:error})}}return deferred.promise()};this.hasRefreshToken=function(){return retrieveRefreshToken()===null?false:true};this._initialize(uri,progress.data.Session.AUTH_TYPE_FORM_SSO,{_loginURI:progress.data.AuthenticationProvider._springFormTokenLoginURIBase,_logoutURI:progress.data.AuthenticationProvider._springLogoutURIBase,_refreshURI:progress.data.AuthenticationProvider._springFormTokenRefreshURIBase});_automaticTokenRefresh=true;Object.defineProperty(this,"automaticTokenRefresh",{get:function(){return _automaticTokenRefresh},set:function(value){if(value===true||value===false){_automaticTokenRefresh=value}else{throw new Error(progress.data._getMsgText("jsdoMSG061","AuthenticationProvider","automaticTokenRefresh"))}},enumerable:true});this._dataKeys.automaticTokenRefresh=this._storageKey+".automaticTokenRefresh";temp=this._retrieveInfoItem(this._dataKeys.automaticTokenRefresh);if(temp===false){_automaticTokenRefresh=false}tokenDataKeys.token=this._storageKey+tokenDataKeys.token;tokenDataKeys.refreshToken=this._storageKey+tokenDataKeys.refreshToken;tokenDataKeys.tokenType=this._storageKey+tokenDataKeys.tokenType;tokenDataKeys.expiration=this._storageKey+tokenDataKeys.expiration;tokenDataKeys.accessTokenExpiration=this._storageKey+tokenDataKeys.accessTokenExpiration;if(retrieveToken()){this._loggedIn=true}};function SSOProxy(){}SSOProxy.prototype=progress.data.AuthenticationProviderForm.prototype;progress.data.AuthenticationProviderSSO.prototype=new SSOProxy;progress.data.AuthenticationProviderSSO.prototype.constructor=progress.data.AuthenticationProviderSSO;fn=progress.data.AuthenticationProviderSSO.prototype._storeInfo;progress.data.AuthenticationProviderSSO.prototype._storeInfo=function(){progress.data.AuthenticationProviderSSO.prototype._storeInfo._super.apply(this);this._storage.setItem(this._dataKeys.automaticTokenRefresh,JSON.stringify(this._automaticTokenRefresh))};progress.data.AuthenticationProviderSSO.prototype._storeInfo._super=fn;fn=progress.data.AuthenticationProviderSSO.prototype._clearInfo;progress.data.AuthenticationProviderSSO.prototype._clearInfo=function(){progress.data.AuthenticationProviderSSO.prototype._clearInfo._super.apply(this);this._storage.removeItem(this._dataKeys.automaticTokenRefresh)};progress.data.AuthenticationProviderSSO.prototype._clearInfo._super=fn})(); +(function(){var isNativeScript=false,isNodeJS=false;var pkg_xmlhttprequest="xmlhttprequest",pkg_nativescriptLocalstorage="nativescript-localstorage",pkg_fileSystemAccess="file-system/file-system-access";function LocalStorageEmulation(){this._data={}}LocalStorageEmulation.prototype.setItem=function(id,val){return this._data[id]=String(val)},LocalStorageEmulation.prototype.getItem=function(id){return this._data.hasOwnProperty(id)?this._data[id]:undefined},LocalStorageEmulation.prototype.removeItem=function(id){return delete this._data[id]},LocalStorageEmulation.prototype.clear=function(){return this._data={}};if(typeof XMLHttpRequest==="undefined"){isNodeJS=true;try{XMLHttpRequest=require(""+pkg_xmlhttprequest).XMLHttpRequest}catch(e){console.error("Error: JSDO library requires XMLHttpRequest object in Node.js.\n"+"Please install xmlhttprequest package.")}}if(!isNodeJS&&(typeof localStorage==="undefined"||typeof sessionStorage==="undefined")){try{require(""+pkg_fileSystemAccess);isNativeScript=true}catch(exception1){isNativeScript=false}}if(isNativeScript){try{if(typeof sessionStorage==="undefined"){sessionStorage=require(""+pkg_nativescriptLocalstorage)}if(typeof localStorage==="undefined"){localStorage=require(""+pkg_nativescriptLocalstorage)}}catch(exception2){console.error("Error: JSDO library requires localStorage and sessionStorage objects in NativeScript.\n"+"Please install nativescript-localstorage package.")}try{if(typeof btoa==="undefined"){btoa=function(str){return Buffer.from(str).toString("base64")}}}catch(exception3){console.error("Error: JSDO library requires toString('base64') function in NativeScript.")}}if(isNodeJS){if(typeof localStorage==="undefined"){localStorage=new LocalStorageEmulation}if(typeof sessionStorage==="undefined"){sessionStorage=new LocalStorageEmulation}try{if(typeof btoa==="undefined"){btoa=function(str){return Buffer.from(str).toString("base64")}}}catch(exception3){console.error("Error: JSDO library requires toString('base64')function in Node.js.")}}if(!isNodeJS&&!isNativeScript){if(typeof btoa!=="undefined"){let btoaOriginal=btoa;btoa=function(str){return btoaOriginal(unescape(encodeURIComponent(str)))}}}})();(function(){if(typeof progress==="undefined"){progress={}}if(typeof progress.data==="undefined"){progress.data={}}progress.util={};var STRING_OBJECT_TYPE="String",DATE_OBJECT_TYPE="Date",CHARACTER_ABL_TYPE="CHARACTER";progress.util.Deferred=function(){function Deferred(){this._deferred={}}Deferred.prototype.promise=function(){var that=this;if(progress.util.Deferred.useJQueryPromises){if(typeof $!=="undefined"&&typeof $.Deferred==="function"){this._deferred._jQuerydeferred=$.Deferred();this._promise=this._deferred._jQuerydeferred.promise()}else{throw new Error("JQuery Promises not found in environment.")}}else{this._promise=new Promise(function(resolve,reject){that._deferred.resolve=resolve;that._deferred.reject=reject})}if(this._resolveArguments||this._rejectArguments){setTimeout(function(){if(that._resolveArguments){that.resolve.apply(that,that._resolveArguments)}else if(that._rejectArguments){that.reject.apply(that,that._rejectArguments)}},500)}return this._promise};Deferred.prototype.resolve=function(arg1,arg2,arg3){if(this._promise){if(this._deferred._jQuerydeferred){this._deferred._jQuerydeferred.resolve.apply(this,arguments)}else{var object=progress.util.Deferred.getParamObject1(arg1,arg2,arg3);this._deferred.resolve(object)}}else{this._resolveArguments=arguments}};Deferred.prototype.reject=function(arg1,arg2,arg3){if(this._promise){if(this._deferred._jQuerydeferred){this._deferred._jQuerydeferred.reject.apply(this,arguments)}else{var object=progress.util.Deferred.getParamObject1(arg1,arg2,arg3);this._deferred.reject(object)}}else{this._rejectArguments=arguments}};Deferred.useJQueryPromises=false;Deferred.when=function(deferreds){if(progress.util.Deferred.useJQueryPromises){return $.when.apply($,deferreds)}else{return Promise.all(deferreds)}};Deferred.getParamObject1=function(arg1,arg2,arg3){var object={},objectName;try{if(typeof arg1==="undefined"||arg1===null){object.result=arg2;object.info=arg3}else{if(arg1 instanceof progress.data.JSDOSession){objectName="jsdosession"}else if(arg1 instanceof progress.data.AuthenticationProvider){objectName="provider"}else if(arg1 instanceof progress.data.JSDO){objectName="jsdo"}else if(typeof arg1==="number"){objectName="result"}else{objectName=typeof arg1}object[objectName]=arg1;if(objectName==="jsdo"){object.success=arg2;if(arg3&&arg3.xhr){object.request=arg3}else if(arg3&&arg3.batch){object.request=arg3}else{object.info=arg3}}else{if(objectName==="result"){object.info=arg2;if(arg3){object.info2=arg3}}else{object.result=arg2;object.info=arg3}}}}catch(e){console.log("Error: Undetermined argument in getParamObject() call.")}return object};Deferred.getParamObject=function(arg1,arg2,arg3){var object={};if(progress.util.Deferred.useJQueryPromises){object=progress.util.Deferred.getParamObject1(arg1,arg2,arg3)}else{if(typeof arg1==="undefined"){object.result=arg2;object.info=arg3;arg1=object}return arg1}return object};return Deferred}();progress.util.Observable=function(){function _filterObservers(observers,fn,scope,operation){return observers.filter(function(el){if(el.fn!==fn||el.scope!==scope||el.operation!==operation){return el}},this)}this.validateSubscribe=function(args,evt,listenerData){if(args.length>=2&&typeof args[0]==="string"&&typeof args[1]==="string"){listenerData.operation=args[1];listenerData.fn=args[2];listenerData.scope=args[3]}else if(args.length>=2&&typeof args[0]==="string"&&typeof args[1]==="function"){listenerData.operation=undefined;listenerData.scope=args[2];listenerData.fn=args[1]}else{throw new Error}};this.subscribe=function(evt,operation,fn,scope){var listenerData,observers;if(!evt){throw new Error(progress.data._getMsgText("jsdoMSG037",this.toString(),"subscribe"))}if(typeof evt!=="string"){throw new Error(progress.data._getMsgText("jsdoMSG033",this.toString(),"subscribe",progress.data._getMsgText("jsdoMSG039")))}this._events=this._events||{};evt=evt.toLowerCase();listenerData={fn:undefined,scope:undefined,operation:undefined};try{this.validateSubscribe(arguments,evt,listenerData)}catch(e){throw new Error(progress.data._getMsgText("jsdoMSG033",this.toString(),"subscribe",e.message))}observers=this._events[evt]||[];observers=_filterObservers(observers,listenerData.fn,listenerData.scope,listenerData.operation);observers.push(listenerData);this._events[evt]=observers;return this};this.unsubscribe=function(evt,operation,fn,scope){var listenerData,observers;if(!evt){throw new Error(progress.data._getMsgText("jsdoMSG037",this.toString(),"unsubscribe"))}if(typeof evt!=="string"){throw new Error(progress.data._getMsgText("jsdoMSG033",this.toString(),"unsubscribe",progress.data._getMsgText("jsdoMSG037")))}this._events=this._events||{};evt=evt.toLowerCase();listenerData={fn:undefined,scope:undefined,operation:undefined};try{this.validateSubscribe(arguments,evt,listenerData)}catch(e){throw new Error(progress.data._getMsgText("jsdoMSG033",this.toString(),"unsubscribe",e.message))}observers=this._events[evt]||[];if(observers.length>0){this._events[evt]=_filterObservers(observers,listenerData.fn,listenerData.scope,listenerData.operation)}return this};this.trigger=function(evt,operation,args){var observers,op;if(!evt){throw new Error(progress.data._getMsgText("jsdoMSG037",this.toString(),"trigger"))}this._events=this._events||{};evt=evt.toLowerCase();observers=this._events[evt]||[];if(observers.length>0){args=Array.prototype.slice.call(arguments);if(arguments.length>=2&&typeof evt==="string"&&typeof operation==="string"){op=operation;args=args.length>2?args.slice(2):[]}else if(arguments.length>=1&&typeof evt==="string"){op=undefined;args=args.length>1?args.slice(1):[]}else{throw new Error(progress.data._getMsgText("jsdoMSG033",this.toString(),"trigger"))}observers.forEach(function(el){if(el.operation===op){el.fn.apply(el.scope,args)}})}return this};this.unsubscribeAll=function(evt,operation){var observers;if(evt){this._events=this._events||{};if(typeof evt==="string"){evt=evt.toLowerCase();observers=this._events[evt]||[];observers.forEach(function(el){if(el.operation){this.unsubscribe(evt,el.operation,el.fn,el.scope)}else{this.unsubscribe(evt,el.fn,el.scope)}},this)}}else{this._events={}}return this}};progress.data.LocalStorage=function LocalStorage(){if(typeof localStorage==="undefined"){throw new Error(progress.data._getMsgText("jsdoMSG126","progress.data.LocalStorage","localStorage"))}this.saveToLocalStorage=function(name,dataObj){localStorage.setItem(name,JSON.stringify(dataObj))};this.readFromLocalStorage=function(name){var jsonStr=localStorage.getItem(name),dataObj=null;if(jsonStr!==null){try{dataObj=JSON.parse(jsonStr)}catch(e){dataObj=null}}return dataObj};this.clearLocalStorage=function(name){localStorage.removeItem(name)}};progress.util._convertToABLWhereString=function(tableRef,filter){var result=[],logic=filter.logic||"and",idx,length,field,fieldInfo,type,format,operator,value,ablType,filters=filter.filters||[filter],whereOperators={eq:"=",neq:"<>",gt:">",gte:">=",lt:"<",lte:"<=",contains:"INDEX",doesnotcontain:"INDEX",endswith:"R-INDEX",startswith:"BEGINS",isnull:"ISNULL",isnotnull:"ISNOTNULL",isempty:"ISEMPTY",isnotempty:"ISNOTEMPTY"};for(idx=0,length=filters.length;idx 0"}else{format="{2} MATCHES '*{1}'"}}else{format="{2} {0} "+format}filter=progress.util._format(format,operator,value,field)}else if(operator&&value===undefined){if(filter.operator==="isempty"||filter.operator==="isnotempty"){ablType=tableRef._getABLType(field);if(ablType!==CHARACTER_ABL_TYPE){throw new Error("Error parsing filter object. The operator "+filter.operator+" requires a CHARACTER field")}if(filter.operator==="isempty"){format="{2} = ''"}else if(filter.operator==="isnotempty"){format="{2} <> ''"}}else{if(filter.operator==="isnull"){format="{2} = ?"}else if(filter.operator==="isnotnull"){format="{2} <> ?"}else{format="{2} {0} ?"}}filter=progress.util._format(format,operator,value,field)}}result.push(filter)}filter=result.join(" "+logic+" ");if(result.length>1){filter="("+filter+")"}return filter};progress.util._convertToSQLQueryString=function(tableRef,filter,addSelect){var result=[],logic=filter.logic||"and",idx,length,field,type,format,operator,value,fieldFormat,filters=filter.filters||[filter],filterStr,usingLike=true,whereOperators={eq:"=",neq:"!=",gt:">",gte:">=",lt:"<",lte:"<=",contains:"LIKE",doesnotcontain:"NOT LIKE",endswith:"LIKE",startswith:"LIKE",isnull:"ISNULL",isnotnull:"ISNOTNULL",isempty:"ISEMPTY",isnotempty:"ISNOTEMPTY"};if(typeof addSelect==="undefined"){addSelect=false}for(idx=0,length=filters.length;idx1){filterStr="("+filterStr+")"}if(addSelect===true){filterStr="SELECT * FROM "+tableRef._name+" WHERE "+filterStr}return filterStr};progress.util._getObjectType=function(value){return Object.prototype.toString.call(value).slice(8,-1)};progress.util._format=function(fmt){var values=arguments,formatRegExp=/\{(\d+)(:[^\}]+)?\}/g;return fmt.replace(formatRegExp,function(match,index,placeholderFormat){var value=values[parseInt(index,10)+1];return progress.util._toString(value,placeholderFormat?placeholderFormat.substring(1):"")})};progress.util._toString=function(value,fmt){var str;if(fmt){if(progress.util._getObjectType(value)==="Date"){return progress.util._formatDate(value,fmt)}}if(typeof value==="number"){str=value.toString()}else{str=value!==undefined?value:""}return str};progress.util._pad=function(number,digits){var zeros=["","0","00","000","0000"],end;number=String(number);digits=digits||2;end=digits-number.length;if(end){return zeros[digits].substring(0,end)+number}return number};progress.util._formatDate=function(date,format){var dateFormatRegExp=/dd|MM|yyyy|hh|mm|fff|FFF|ss|zzz|iso|"[^"]*"|'[^']*'/g;return format.replace(dateFormatRegExp,function(match){var minutes,result,sign;if(match==="dd"){result=progress.util._pad(date.getDate())}else if(match==="MM"){result=progress.util._pad(date.getMonth()+1)}else if(match==="yyyy"){result=progress.util._pad(date.getFullYear(),4)}else if(match==="hh"){result=progress.util._pad(date.getHours())}else if(match==="mm"){result=progress.util._pad(date.getMinutes())}else if(match==="ss"){result=progress.util._pad(date.getSeconds())}else if(match==="fff"){result=progress.util._pad(date.getMilliseconds(),3)}else if(match==="FFF"){result=String(date.getTime())}else if(match==="zzz"){minutes=date.getTimezoneOffset();sign=minutes<0;result=(sign?"+":"-")+minutes}else if(match==="iso"){result=date.toISOString()}return result!==undefined?result:match.slice(1,match.length-1)})};progress.util.jsdoSettingsProcessor=function jsdoSettingsProcessor(jsdoSettings){if(typeof jsdoSettings==="object"){if(jsdoSettings.authenticationModel===undefined||jsdoSettings.authenticationModel===""){jsdoSettings.authenticationModel="ANONYMOUS"}}}})();(function(){var PROGRESS_JSDO_PCT_MAX_EMPTY_BLOCKS=20,PROGRESS_JSDO_OP_STRING=["none","create","read","update","delete","submit"],PROGRESS_JSDO_ROW_STATE_STRING=["","created","","modified","deleted"];if(typeof progress==="undefined"){progress={}}if(typeof progress.data==="undefined"){progress.data={}}progress.data._nextid=0;progress.data._uidprefix=""+(Date.now?Date.now():(new Date).getTime());var UID_MAX_VALUE=999999999999999;progress.data._getNextId=function(){var uid=++progress.data._nextid;if(uid>=UID_MAX_VALUE){progress.data._nextid=uid=1;progress.data._uidprefix=""+(Date.now?Date.now():(new Date).getTime())}return progress.data._uidprefix+"-"+uid};var msg={};msg.msgs={};msg.msgs.jsdoMSG000="JSDO, Internal Error: {1}";msg.msgs.jsdoMSG001="JSDO: JSDO has multiple tables. Please use {1} at the table reference level.";msg.msgs.jsdoMSG002="JSDO: Working record for '{1}' is undefined.";msg.msgs.jsdoMSG003="JSDO: {1} function requires a function as a parameter.";msg.msgs.jsdoMSG004="JSDO: Unable to find resource '{1}' in the catalog.";msg.msgs.jsdoMSG005="JSDO: Data for table '{1}' was not specified in addRecords() call.";msg.msgs.jsdoMSG006="JSDO: Data for JSDO was not specified in addRecords() call.";msg.msgs.jsdoMSG007="JSDO: Test function in {1} must return a boolean.";msg.msgs.jsdoMSG008="JSDO: Invalid keyFields parameter in addRecords() call.";msg.msgs.jsdoMSG009="JSDO: KeyField '{1}' in addRecords() call was not found in the schema.";msg.msgs.jsdoMSG010="JSDO: Field '{1}' in relationship was not found in the schema.";msg.msgs.jsdoMSG011="UIHelper: JSDO has multiple tables. "+"Please use {1} at the table reference level.";msg.msgs.jsdoMSG012="UIHelper: Invalid {2} parameter in {1} call.";msg.msgs.jsdoMSG020="JSDO: tableName parameter must be a string in addRecords() call.";msg.msgs.jsdoMSG021="JSDO: addMode parameter must be specified in addRecords() call.";msg.msgs.jsdoMSG022="JSDO: Invalid addMode specified in addRecords() call.";msg.msgs.jsdoMSG023="JSDO: Duplicate found in addRecords() call using APPEND mode.";msg.msgs.jsdoMSG024="{1}: Unexpected signature in call to {2} function.";msg.msgs.jsdoMSG025="{1}: Invalid parameters in call to {2} function.";msg.msgs.jsdoMSG026="JSDO: saveChanges requires a "+"CREATE, UPDATE, DELETE or SUBMIT operation to be defined.";msg.msgs.jsdoMSG030="JSDO: Invalid {1}, expected {2}.";msg.msgs.jsdoMSG031="JSDO: Specified sort field name '{1}' was not found in the schema.";msg.msgs.jsdoMSG032="JSDO: Before-image data already exists for record in addRecords() call.";msg.msgs.jsdoMSG033="{1}: Invalid signature for {2}. {3}";msg.msgs.jsdoMSG034="JSDO: In '{1}' function, JSON data is missing _id";msg.msgs.jsdoMSG035="JSDO: In '{1}' function, before-image JSON data is missing prods:clientId";msg.msgs.jsdoMSG036="JSDO: '{1}' can only be called for a dataset";msg.msgs.jsdoMSG037="{1}: Event name must be provided for {2}.";msg.msgs.jsdoMSG038="Too few arguments. There must be at least {1}.";msg.msgs.jsdoMSG039="The name of the event is not a string.";msg.msgs.jsdoMSG040="The event listener is not a function.";msg.msgs.jsdoMSG041="The event listener scope is not an object.";msg.msgs.jsdoMSG042="'{1}' is not a defined event for this object.";msg.msgs.jsdoMSG043="{1}: A session object was requested to check the status of a Mobile "+"Service named '{2}', but it has not loaded the definition of that service.";msg.msgs.jsdoMSG044="JSDO: In '{1}' function, {2} is missing {3} property.";msg.msgs.jsdoMSG045="JSDO: {1} function: {2} is missing {3} property.";msg.msgs.jsdoMSG046="JSDO: {1} operation is not defined.";msg.msgs.jsdoMSG047="{1} timeout expired.";msg.msgs.jsdoMSG048="{1}: {2} method has argument '{3}' that is missing property '{4}'.";msg.msgs.jsdoMSG049="{1}: Unexpected error calling {2}: {3}";msg.msgs.jsdoMSG050="No token returned from server";msg.msgs.jsdoMSG051="{1} The login method was not executed because the AuthenticationProvider is already logged in.";msg.msgs.jsdoMSG052="{1}: The login method was not executed because no credentials were supplied.";msg.msgs.jsdoMSG053="{1}: {2} was not executed because the AuthenticationProvider is not logged in.";msg.msgs.jsdoMSG054="{1}: Token refresh was not executed because the AuthenticationProvider does not have a refresh token.";msg.msgs.jsdoMSG055="{1}: Token refresh was not executed because the authentication model is not sso.";msg.msgs.jsdoMSG056="{1}: Already logged in.";msg.msgs.jsdoMSG057="{1}: Cannot call {2} when authenticationModel is SSO. Please use the AuthenticationProvider object instead.";msg.msgs.jsdoMSG058="{1}: Cannot pass username and password to addCatalog when authenticationModel "+"is sso. Pass an AuthenticationProvider instead.";msg.msgs.jsdoMSG059="{1}: Error in constructor. The authenticationModels of the "+"AuthenticationProvider ({2}) and the JSDOSession ({3}) were not compatible.";msg.msgs.jsdoMSG060="AuthenticationProvider: AuthenticationProvider is no longer logged in. "+"Tried to refresh SSO token but failed due to authentication error at token server.";msg.msgs.jsdoMSG061="{1}: Attempted to set {2} property to an invalid value.";msg.msgs.jsdoMSG062="{1}: Cannot call {2} when an AuthenticationProvider is already available and logged in.";msg.msgs.jsdoMSG100="JSDO: Unexpected HTTP response. Too many records.";msg.msgs.jsdoMSG101="Network error while executing HTTP request.";msg.msgs.jsdoMSG110="Catalog error: idProperty not specified for resource '{1}'. "+"idProperty is required {2}.";msg.msgs.jsdoMSG111="Catalog error: Schema '{1}' was not found in catalog.";msg.msgs.jsdoMSG112="Catalog error: Output parameter '{1}' was not found for operation '{2}'.";msg.msgs.jsdoMSG113="Catalog error: Found xType '{1}' for output parameter '{2}' "+"for operation '{3}' but xType DATASET, TABLE or ARRAY was expected.";msg.msgs.jsdoMSG114="JSDO: idProperty '{1}' is missing from '{2}' record.";msg.msgs.jsdoMSG115="JSDO: Invalid option specified in {1}() call.";msg.msgs.jsdoMSG116="JSDO: {1} parameter must be a string in {2} call.";msg.msgs.jsdoMSG117="JSDO: Schema from storage area '{1}' does not match JSDO schema";msg.msgs.jsdoMSG118="JSDO: Plugin '{1}' was not found.";msg.msgs.jsdoMSG119="JSDO: A mappingType is expected when 'capabilities' is set."+" Please specify a plugin (ex: JFP).";msg.msgs.jsdoMSG120="JSDO: Parameter '{2}' requires capability '{1}' in the catalog.";msg.msgs.jsdoMSG121="{1}: Argument {2} must be of type {3} in {4} call.";msg.msgs.jsdoMSG122="{1}: Incorrect number of arguments in {2} call. There should be {3}.";msg.msgs.jsdoMSG123="{1}: A server response included an invalid '{2}' header.";msg.msgs.jsdoMSG124="JSDO: autoApplyChanges is not supported for saveChanges(true) "+"with a temp-table. Use jsdo.autoApplyChanges = false.";msg.msgs.jsdoMSG125="{1}: The AuthenticationProvider is not managing valid credentials.";msg.msgs.jsdoMSG126="{1}: No support for {2}.";msg.msgs.jsdoMSG127="JSDO: acceptRowChanges() cannot be called for record with _rejected === true.";msg.msgs.jsdoMSG500="{1}: '{2}' objects must contain a '{3}' property.";msg.msgs.jsdoMSG501="{1}: '{2}' in '{3}' function cannot be an empty string.";msg.msgs.jsdoMSG502="{1}: The '{2}' parameter passed to the '{3}' function has an invalid value for "+"its '{4}' property.";msg.msgs.jsdoMSG503="{1}: '{2}' must be of type '{3}'.";msg.msgs.jsdoMSG504="{1}: {2} has an invalid value for the '{3}' property.";msg.msgs.jsdoMSG505="{1}: '{2}' objects must have a '{3}' method.";msg.msgs.jsdoMSG506="{1}: Invalid argument for the {2} parameter in {3} call.";msg.msgs.jsdoMSG507="{1}: '{2}' is an invalid value for the {3} parameter in {4} call.";msg.msgs.jsdoMSG508="JSDOSession: If a JSDOSession object is using the SSO authentication model, "+"the options object passed to its constructor must include an authProvider property.";msg.msgs.jsdoMSG509="progress.data.getSession: If the authenticationModel is AUTH_TYPE_SSO, "+"authenticationURI and authProviderAuthenticationModel are required parameters.";msg.msgs.jsdoMSG510="{1}: This session has been invalidated and cannot be used.";msg.msgs.jsdoMSG511="JSDOSession: addCatalog() can only be called if an AuthenticationProvider was passed as an argument or "+"connect() has been successfully called.";msg.msgs.jsdoMSG512="JSDOSession: Error while loading multiple catalogs.";msg.msgs.jsdoMSG998="JSDO: JSON object in addRecords() must be DataSet or Temp-Table data.";msg.getMsgText=function(n,args){var text=msg.msgs[n],i;if(!text){throw new Error("Message text was not found by getMsgText()")}for(i=1;i=PROGRESS_JSDO_PCT_MAX_EMPTY_BLOCKS)this._needCompaction=true;data=newDataArray}else{if(params&&(params.sort||params.top)){newDataArray=[];for(i=0;i0){sortObject.tableRef=this;data.sort(this._getCompareFn(sortObject))}}if(params.top){if(typeof params.skip=="undefined"){params.skip=0}data=data.splice(params.skip,params.top)}}return data};this._recToDataObject=function(record,includeChildren){var array=[record];var dataObject=array;if(typeof includeChildren=="undefined"){includeChildren=false}if(this._jsdo._dataSetName){dataObject={};dataObject[this._jsdo._dataSetName]={};dataObject[this._jsdo._dataSetName][this._name]=array;if(includeChildren&&this._children.length>0){var jsrecord=this._findById(record._id,false);if(jsrecord){for(var i=0;i0){for(var j=0;j0){for(var i=0;i=PROGRESS_JSDO_PCT_MAX_EMPTY_BLOCKS)this._needCompaction=true};this._equalRecord=function(rec1,rec2,keyFields){var field;var match=true;for(var i=0;ivalue2||(value1===undefined||value1===null))return sortAscending[i]?1:-1;else if(value10)this._sort(sortObject)}else{this._sort(arg1)}this._createIndex()};this._sort=function(arg1){if(arguments.length===0&&(!this.autoSort||this._sortFn===undefined&&this._sortObject.sortFields===undefined))return;if(arguments.length===0){if(this._sortFn){this._data.sort(this._sortFn)}else{this._data.sort(this._compareFields)}this._needsAutoSorting=false}else{if(typeof arg1=="function"){this._data.sort(this._getCompareFn(arg1))}else{arg1.tableRef=this;this._data.sort(this._getCompareFn(arg1))}if(this.autoSort)this._needsAutoSorting=true}};this.addRecords=function(jsonObject,addMode,keyFields,trackChanges,isInvoke){this._jsdo._addRecords(this._name,jsonObject,addMode,keyFields,trackChanges,isInvoke)};this.acceptChanges=function(){var tableRef=this;for(var id in tableRef._beforeImage){if(tableRef._beforeImage[id]===null){var jsrecord=tableRef._findById(id,false);if(jsrecord!==null){tableRef._jsdo._deleteProdsProperties(jsrecord.data,true)}}else if(this._changed[id]!==undefined){var jsrecord=this._findById(id,false);if(jsrecord!==null){tableRef._jsdo._deleteProdsProperties(jsrecord.data,true)}}}tableRef._processed={};tableRef._added=[];tableRef._changed={};tableRef._deleted=[];tableRef._beforeImage={}};this.rejectChanges=function(){for(var id in this._beforeImage){if(this._beforeImage[id]===null){this._jsdo._undoCreate(this,id)}else if(this._changed[id]!==undefined){this._jsdo._undoUpdate(this,id,true)}else{this._jsdo._undoDelete(this,id,true)}}var tableRef=this;tableRef._processed={};tableRef._added=[];tableRef._changed={};tableRef._deleted=[]};this.hasChanges=function(){return Object.keys(this._beforeImage).length!==0};this.getChanges=function(){var result=[];for(var id in this._beforeImage){var item={rowState:"",record:null};if(this._beforeImage[id]===null){item.rowState=PROGRESS_JSDO_ROW_STATE_STRING[progress.data.JSDO._OP_CREATE];item.record=this._findById(id,false)}else if(this._changed[id]!==undefined){item.rowState=PROGRESS_JSDO_ROW_STATE_STRING[progress.data.JSDO._OP_UPDATE];item.record=this._findById(id,false)}else{item.rowState=PROGRESS_JSDO_ROW_STATE_STRING[progress.data.JSDO._OP_DELETE];item.record=new progress.data.JSRecord(this,this._beforeImage[id])}result.push(item)}return result};this._clearErrorStrings=function(){var record=null;for(var id in this._beforeImage){if(this._beforeImage[id]===null){record=this._findById(id,false);if(record){delete record.data._errorString}}else{record=this._findById(id,false);if(record){delete record.data._errorString}else{delete this._beforeImage[id]._errorString}}}};this._applyChanges=function(){var i;for(var id in this._beforeImage){if(this._beforeImage[id]===null){var jsrecord=this._findById(id,false);if(jsrecord===null&&this._jsdo._resource.idProperty!==undefined){if(this._tmpIndex[id]){var record=this._data[this._tmpIndex[id].index];jsrecord=record?new progress.data.JSRecord(this,record):null;delete this._tmpIndex[id]}}if(jsrecord!==null){if(jsrecord.data._rejected||jsrecord.data._errorString!==undefined){this._jsdo._undoCreate(this,id)}else{jsrecord.acceptRowChanges()}}else{var found=false;for(var i=0;i0){for(var i=0;iindex){i--}if(i!=index){this._tableRef._data.splice(index,1);this._tableRef._data.splice(i,0,record);this._tableRef._createIndex()}}}};this.assign=function(record){if(record===undefined)throw new Error(msg.getMsgText("jsdoMSG024","JSDO","assign() or update()"));this._saveBeforeImageUpdate();var fieldName,i,j,value,schema=this._tableRef.getSchema(),prefixElement,name;if(record){for(i=0;i0&&!this._fields[fieldName.toLowerCase()]){name=fieldName.substring(0,index);element=fieldName.substring(index+progress.data.JSDO.ARRAY_INDEX_SEPARATOR.length);fieldInfo=this._fields[name.toLowerCase()];if(!isNaN(element)&&fieldInfo&&fieldInfo.type==="array"){return this.record.data[name][element-1]}}return this.record.data[fieldName]}else return null},set:function(value){var name=fieldName,index,element,fieldInfo;if(this.record){this.record._saveBeforeImageUpdate();try{index=fieldName.indexOf(progress.data.JSDO.ARRAY_INDEX_SEPARATOR);if(index>0&&!this._fields[fieldName.toLowerCase()]){name=fieldName.substring(0,index);element=fieldName.substring(index+progress.data.JSDO.ARRAY_INDEX_SEPARATOR.length);fieldInfo=this._fields[name.toLowerCase()];if(!isNaN(element)&&fieldInfo&&fieldInfo.type==="array"){this.record.data[name][element-1]=value;return}}this.record.data[fieldName]=value}finally{this.record._sortRecord(name)}}},enumerable:true,writeable:true})};Object.defineProperty(this,"hasSubmitOperation",{get:function(){return this._hasSubmitOperation},enumerable:true});Object.defineProperty(this,"hasCUDOperations",{get:function(){return this._hasCUDOperations},enumerable:true});Object.defineProperty(this,"defaultTableRef",{get:function(){return this._defaultTableRef},enumerable:true});this._buffers={};this._numBuffers=0;this._defaultTableRef=null;this._async=true;this._dataProperty=null;this._dataSetName=null;this.operations=[];this.useRelationships=true;this._session=null;this._needCompaction=false;this._hasCUDOperations=false;this._hasSubmitOperation=false;this._useSubmit=false;this.autoApplyChanges=true;this._lastErrors=[];this._localStorage=null;this._convertForServer;this._fillMergeMode;var autoFill=false;if(!arguments[0]){throw new Error("JSDO: Parameters are required in constructor.")}if(typeof arguments[0]=="string"){this.name=arguments[0]}else if(typeof arguments[0]=="object"){var args=arguments[0];for(var v in args){switch(v){case"autoFill":autoFill=args[v];break;case"events":this._events={};for(var eventName in args[v]){this._events[eventName.toLowerCase()]=args[v][eventName]}break;case"dataProperty":this._dataProperty=args[v];break;default:this[v]=args[v]}}}if(!this.name){throw new Error("JSDO: JSDO constructor is missing the value for 'name'")}if(this._events){if(typeof this._events!=="object"){throw new Error("JSDO: JSDO constructor event object is not defined as an object")}for(var prop in this._events){var evt=this._events[prop];if(!(evt instanceof Array)){throw new Error("JSDO: JSDO constructor event object for "+prop+" must be an array")}evt.forEach(function(el){if(typeof el!=="object"){throw new Error("JSDO: JSDO constuctor event object for "+prop+" is not defined as an object")}if(typeof el.fn!=="function"){throw new Error("JSDO: JSDO event listener for "+prop+" is not a function.")}if(el.scope&&typeof el.scope!=="object"){throw new Error("JSDO: JSDO event listener scope for "+prop+" is not an object.")}})}}if(this.name){this._resource=progress.data.ServicesManager.getResource(this.name);if(this._resource){if(!this.url)this.url=this._resource.url;if(!this._dataSetName&&this._resource._dataSetName){this._dataSetName=this._resource._dataSetName;if(this._resource.dataProperty){var buffer=this[this._resource.dataProperty]=new progress.data.JSTableRef(this,this._resource.dataProperty);this._buffers[this._resource.dataProperty]=buffer}else{for(var tableName in this._resource.fields){var buffer=this[tableName]=new progress.data.JSTableRef(this,tableName);this._buffers[tableName]=buffer}}}if(!this._dataProperty&&this._resource.dataProperty)this._dataProperty=this._resource.dataProperty;if(!this._dataSetName){var tableName=this._dataProperty?this._dataProperty:"";this._buffers[tableName]=new progress.data.JSTableRef(this,tableName);if(tableName)this[tableName]=this._buffers[tableName]}var properties,tableName;if(this._dataSetName&&this._resource.schema&&this._resource.schema.properties[this._dataSetName]){properties=this._resource.schema.properties[this._dataSetName].properties;if(Object.keys(properties).length===1){tableName=Object.keys(properties)[0];if(properties[tableName].idProperty){this._resource.idProperty=properties[tableName].idProperty}}}else if(this._resource.schema&&this._resource.schema.properties&&this._resource.schema.properties[tableName]&&this._resource.schema.properties[tableName].idProperty){this._resource.idProperty=this._resource.schema.properties[tableName].idProperty}for(var fnName in this._resource.fn){this[fnName]=this._resource.fn[fnName]["function"]}this._hasCUDOperations=this._resource.generic["create"]!==undefined||this._resource.generic["update"]!==undefined||this._resource.generic["delete"]!==undefined;this._hasSubmitOperation=this._resource.generic["submit"]!==undefined;if(!this._session){var myservice=progress.data.ServicesManager.getService(this._resource.service.name);this._session=myservice._session;this._session._pushJSDOs(this)}}else{throw new Error(msg.getMsgText("jsdoMSG004",this.name))}}else{this._buffers[""]=new progress.data.JSTableRef(this,"")}if(!this._session){throw new Error("JSDO: Unable to get user session for resource '"+this.name+"'")}for(var buf in this._buffers){this._buffers[buf]._parent=null;this._buffers[buf]._children=[];this._buffers[buf]._relationship=null;this._buffers[buf]._isNested=false;if(!this._defaultTableRef)this._defaultTableRef=this._buffers[buf];this._numBuffers++}if(this._numBuffers!=1)this._defaultTableRef=null;else{this.record=null}if(typeof Object.defineProperty=="function"){this._caseSensitive=false;Object.defineProperty(this,"caseSensitive",{get:function(){return this._caseSensitive},set:function(value){this._caseSensitive=value?true:false;for(var buf in this._buffers){this._buffers[buf].caseSensitive=this._caseSensitive}},enumerable:true,writeable:true});this._autoSort=true;Object.defineProperty(this,"autoSort",{get:function(){return this._autoSort},set:function(value){this._autoSort=value?true:false;for(var buf in this._buffers){this._buffers[buf].autoSort=this._autoSort}},enumerable:true,writeable:true})}this._properties={};if(typeof Object.defineProperty=="function"){Object.defineProperty(this,"this._properties",{get:function(){return this._properties},enumerable:false})}if(this._resource&&this._resource.fields){for(var buf in this._buffers){this._buffers[buf]._schema=this._resource.fields[buf];this._buffers[buf]._primaryKeys=this._resource.primaryKeys[buf];this._buffers[buf]._fields={};var fields=this._buffers[buf]._schema;for(var i=0;i1){for(var buf in this._buffers){var fields=[];var found=false;for(var i=0;i=0?index+1:"");element.value=value?value[index]:undefined;return element};this.isDataSet=function(){return this._dataSetName?true:false};this._invokeComplete=function(jsdo,success,request){if(request.async&&request.fnName){jsdo.trigger("afterInvoke",request.fnName,jsdo,success,request)}if(request.deferred){if(success){request.deferred.resolve(jsdo,success,request)}else{request.deferred.reject(jsdo,success,request)}}};this._invokeSuccess=function(){};this._invokeError=function(){};this._httpRequest=function(xhr,method,url,reqBody,request){function afterOpenRequest(){var input=null;if(reqBody){xhr.setRequestHeader("Content-Type","application/json; charset=utf-8");input=JSON.stringify(reqBody)}try{xhr.send(input)}catch(e){request.success=false;request.exception=e;xhr.jsdo._session._checkServiceResponse(xhr,request.success,request)}}if(!xhr){xhr=new XMLHttpRequest;xhr.onCompleteFn=this._invokeComplete;xhr.onSuccessFn=this._invokeSuccess;xhr.onErrorFn=this._invokeError;xhr.onreadystatechange=this.onReadyStateChangeGeneric;if(request.async&&request.fnName){this.trigger("beforeInvoke",request.fnName,this,request)}if(reqBody){if(this._resource&&this._resource.service){var useRequest=this._resource.service.useRequest;if(this._resource.service.settings&&this._resource.service.settings.useRequest!==undefined){useRequest=this._resource.service.settings.useRequest}if(useRequest){reqBody={request:reqBody}}}}}xhr.request=request;xhr.jsdo=this;request.jsdo=this;request.xhr=xhr;this._session._openRequest(xhr,method,url,request.async,afterOpenRequest);return request};this._getDataObject=function(){var dataObject={};if(this._dataSetName){dataObject[this._dataSetName]={};var oldUseRelationships=this.useRelationships;try{this.useRelationships=false;for(var buf in this._buffers){dataObject[this._dataSetName][buf]=this._buffers[buf].getData()}}finally{this.useRelationships=oldUseRelationships}}else{if(this._dataProperty){dataObject[this._dataProperty]=this.getData()}else return this.getData()}return dataObject};this._getDataObjectAsNested=function(){var dataObject={};if(this._dataSetName){dataObject[this._dataSetName]={};try{for(var buf in this._buffers){var bufObj=this._buffers[buf];if(bufObj._isNested)continue;this._nestChildren=false;if(bufObj._children.length>0){for(var i=0;i0){hasErrors=true}}if(hasErrors){this._allRecordsRejected=true;this._someRecordsRejected=true;for(i=0;i0){this._allRecordsRejected=true;this._someRecordsRejected=false;hasCommittedRecords=false;for(i=0;i0&&!param.operations[0].success){this._allRecordsRejected=true;this._someRecordsRejected=true;for(i=0;i0){this._convertForServer=true;this._buffers[buf]._convertForServer=true}}};this._convertRequestData=function(objParam){var buf,beforeData;if(this._convertForServer===false){return}for(buf in this._buffers){if(this._buffers[buf]._convertForServer){if(objParam[this._dataSetName]){if(objParam[this._dataSetName][buf]){this._convertTableData(this._buffers[buf],objParam[this._dataSetName][buf])}beforeData=objParam[this._dataSetName]["prods:before"];if(beforeData&&beforeData[buf]){this._convertTableData(this._buffers[buf],beforeData[buf])}}else if(objParam[buf]){this._convertTableData(this._buffers[buf],objParam[buf])}}}};this._convertTableData=function(tableRef,tableData){var i;for(i=0;i0){this._confirmOperationExists(progress.data.JSDO._OP_DELETE);checkedDelete=true}if(!checkedCreate&&tableRef._added.length>0){this._confirmOperationExists(progress.data.JSDO._OP_CREATE);checkedCreate=true}if(!checkedUpdate&&Object.keys(tableRef._changed).length>0){this._confirmOperationExists(progress.data.JSDO._OP_UPDATE);checkedUpdate=true}if(checkedDelete&&checkedCreate&&checkedUpdate){break}}};this._confirmOperationExists=function(operation){var operationStr=PROGRESS_JSDO_OP_STRING[operation];if(typeof this._resource.generic[operationStr]!=="function"){throw new Error(msg.getMsgText("jsdoMSG046",operationStr.toUpperCase()))}};this.invoke=function(name,object){var deferred,promise;try{var request=this[name](object);if(request.deferred){deferred=request.deferred;promise=request.deferred.promise()}}catch(error){if(progress.util.Deferred.useJQueryPromises){throw error}else{if(!deferred){deferred=new progress.util.Deferred;promise=deferred.promise()}deferred.reject(this,false,{errorObject:error})}}return promise};this._syncTableRef=function(operation,tableRef,batch){var rowData,requestData,jsonObject,dataSetObject;if(tableRef._visited)return;tableRef._visited=true;if(!batch){batch={operations:[]}}else if(!batch.operations){batch.operations=[]}switch(operation){case progress.data.JSDO._OP_CREATE:for(var i=0;i0&&!dataSetJsonObject[tableRef._name])dataSetJsonObject[tableRef._name]=[];for(var i=0;i0||tableRef._added.length>0||hasUpdates){hasChanges=true;break}}return hasChanges};this._addDeletesToChangeSet=function(tableRef,dataSetJsonObject,request){for(var i=0;i=10){tmpIndex={};for(var i=0;ivalue2||value1===null)return false;else if(value11){for(var buf in this._buffers){if(this._buffers[buf]._isNested&&this._buffers[buf]._parent&&this._buffers[this._buffers[buf]._parent]){var srcData=this._buffers[this._buffers[buf]._parent]._data;var data=[];for(var i=0;i1){xhr.request.success=false;throw new Error(msg.getMsgText("jsdoMSG100"))}for(var i=0;i1){xhr.request.success=false;throw new Error(msg.getMsgText("jsdoMSG100"))}for(var i=0;i1){xhr.request.success=false;throw new Error(msg.getMsgText("jsdoMSG100"))}var recordId=beforeTableJsonObject[0]["prods:clientId"];if(!recordId){throw new Error(msg.getMsgText("jsdoMSG035","_checkForDeleteError()"))}if(beforeTableJsonObject[0]["prods:hasErrors"]){var prods_id=beforeTableJsonObject[0]["prods:id"];var errorString=this._getErrorStringFromJsonObject(dataSetJsonObject,tableRef,prods_id);this._setErrorString(tableRef,recordId,errorString,true);hasError=true}}return hasError};this._mergeUpdateForSubmit=function(jsonObject,xhr){var errorString;if(!this._dataSetName){throw new Error(msg.getMsgText("jsdoMSG036","_mergeUpdateForSubmit()"))}var dataSetJsonObject=jsonObject[this._dataSetName];if(dataSetJsonObject[this._dataSetName])dataSetJsonObject=dataSetJsonObject[this._dataSetName];var beforeJsonObject=dataSetJsonObject["prods:before"];for(var buf in this._buffers){var tableRef=this._buffers[buf];var tableJsonObject=dataSetJsonObject[tableRef._name];if(tableJsonObject instanceof Array){for(var i=0;i1){request.success=false;throw new Error(msg.getMsgText("jsdoMSG100"))}}if(beforeJsonObject){hasError=jsdo._checkForDeleteError(dataSetJsonObject,xhr)}if(hasError)request.success=false;if(jsdo.autoApplyChanges){if(!hasError){delete request.jsrecord._tableRef._beforeImage[request.jsrecord.data._id]}else{jsdo._deleteError(jsdo,success,request)}}};this._deleteError=function(jsdo,success,request){if(jsdo.autoApplyChanges){jsdo._undoDelete(request.jsrecord._tableRef,request.jsrecord.data._id)}};this._createComplete=function(jsdo,success,request){var xhr=request.xhr;var jsrecord=request.jsrecord;try{jsdo._deleteProdsProperties(jsrecord.data,false);jsrecord._tableRef.trigger("afterCreate",jsdo,jsrecord,request.success,request);jsdo.trigger("afterCreate",jsdo,jsrecord,request.success,request)}finally{request.complete=true;jsdo._checkSaveComplete(xhr)}};this._createSuccess=function(jsdo,success,request){var xhr=request.xhr;var record=request.response;var hasError=jsdo._mergeUpdateForCUD(record,xhr);if(hasError)request.success=false;if(jsdo.autoApplyChanges){if(!hasError){delete request.jsrecord._tableRef._beforeImage[request.jsrecord.data._id]}else{jsdo._createError(jsdo,success,request)}}};this._createError=function(jsdo,success,request){if(jsdo.autoApplyChanges){jsdo._undoCreate(request.jsrecord._tableRef,request.jsrecord.data._id)}};this._updateComplete=function(jsdo,success,request){var xhr=request.xhr;var jsrecord=request.jsrecord;try{jsdo._deleteProdsProperties(jsrecord.data,false);jsrecord._tableRef.trigger("afterUpdate",jsdo,jsrecord,request.success,request);jsdo.trigger("afterUpdate",jsdo,jsrecord,request.success,request)}finally{request.complete=true;jsdo._checkSaveComplete(xhr)}};this._updateSuccess=function(jsdo,success,request){var xhr=request.xhr;var hasError=jsdo._mergeUpdateForCUD(request.response,xhr);if(hasError){request.success=false}if(jsdo.autoApplyChanges){if(!hasError){request.success=true;delete request.jsrecord._tableRef._beforeImage[request.jsrecord.data._id]}else{jsdo._updateError(jsdo,success,request)}}};this._updateError=function(jsdo,success,request){if(jsdo.autoApplyChanges){request.success=false;jsdo._undoUpdate(request.jsrecord._tableRef,request.jsrecord.data._id)}};this._saveChangesSuccess=function(jsdo,success,request){var records=request.response;jsdo._mergeUpdateForSubmit(records,request.xhr);jsdo._clearErrors();var changes=jsdo.getChanges();jsdo._updateLastErrors(jsdo,null,changes);jsdo._setAllRecordsRejected(changes);if(jsdo.autoApplyChanges){jsdo._applyChanges()}};this._saveChangesError=function(jsdo,success,request){jsdo._setAllRecordsRejected(true);if(jsdo.autoApplyChanges){jsdo.rejectChanges()}jsdo._updateLastErrors(jsdo,null,null,request)};this._saveChangesSuccessTT=function(jsdo,success,request){var changes;jsdo._clearErrors();changes=jsdo.getChanges();jsdo._updateLastErrors(jsdo,null,changes);jsdo._setAllRecordsRejected(false)};this._saveChangesComplete=function(jsdo,success,request){if(request.xhr.status>=200&&request.xhr.status<300&&(jsdo._lastErrors.length>0||jsdo._someRecordsRejected)){request.success=false}if(jsdo._useSubmit===true){jsdo._fireCUDTriggersForSubmit(request)}jsdo._undefWorkingRecord();jsdo._fireAfterSaveChanges(request.success,request)};this._fireAfterSaveChanges=function(success,request){this.trigger("afterSaveChanges",this,success,request);if(request.jsrecords){if(request.deferred){if(success){request.deferred.resolve(this,success,request)}else{request.deferred.reject(this,success,request)}}}else if(request.batch&&request.batch.deferred){if(success){request.batch.deferred.resolve(this,success,request)}else{request.batch.deferred.reject(this,success,request)}}var clearErrorString=this.autoApplyChanges;if(request.jsrecords){for(var idx=0;idx=400&&request.xhr.status<600){try{var responseObject=JSON.parse(request.xhr.responseText);if(responseObject instanceof Array){errorArray=responseObject}else if(responseObject instanceof Object){errorArray.push(responseObject)}for(i=0;i=400&&request.xhr.status<600)){errors.push({type:progress.data.JSDO.ERROR,error:"Error: HTTP Status "+request.xhr.status+" "+request.xhr.statusText,responseText:request.xhr.responseText})}}return errors};this._updateLastErrors=function(jsdo,batch,changes,request){var errors,errorText,responseObject,i,j,buf;if(batch){if(batch.operations===undefined)return;for(i=0;i=200&&request.xhr.status<300){jsdo._lastErrors.push({errorString:request.jsrecord.data._errorString});jsdo._buffers[request.jsrecord._tableRef._name]._lastErrors.push({type:progress.data.JSDO.DATA_ERROR,id:request.jsrecord.data._id,error:request.jsrecord.data._errorString})}else{errors=this._getErrorsFromRequest(request);errorText="";for(j=0;j1&&errors[j].error.indexOf("(7243)")!=-1){continue}if(request.jsrecord&&(errors[j].type===progress.data.JSDO.APP_ERROR||errors[j].type===progress.data.JSDO.RETVAL)){errors[j].id=request.jsrecord.data._id;request.jsrecord._tableRef._lastErrors.push(errors[j])}if(errorText.length===0){errorText=errors[j].error}else{errorText+="\n"+errors[j].error}}jsdo._lastErrors.push({errorString:errorText})}}}}else if(changes instanceof Array){for(i=0;i=400&&request.xhr.status<600||request.xhr.status===0)){errors=this._getErrorsFromRequest(request);errorText="";for(j=0;j1&&errors[j].error.indexOf("(7243)")!=-1){continue}for(buf in this._buffers){this._buffers[buf]._lastErrors.push(errors[j])}if(errorText.length===0){errorText=errors[j].error}else{errorText+="\n"+errors[j].error}}jsdo._lastErrors.push({errorString:errorText})}};this._checkSaveComplete=function(xhr){if(xhr.request){var jsdo=xhr.request.jsdo;var batch=xhr.request.batch;if(jsdo&&batch&&jsdo._async){if(jsdo._isBatchComplete(batch)){var success=jsdo._isBatchSuccess(batch);var request={batch:batch,success:success};jsdo._undefWorkingRecord();jsdo._lastErrors=[];if(!success&&batch.operations){jsdo._updateLastErrors(jsdo,batch,null)}this._setAllRecordsRejected(batch);jsdo._fireAfterSaveChanges(success,request)}}}};this._isBatchSuccess=function(batch){if(batch.operations){for(var i=0;i=200&&xhr.status<300||xhr.status===0&&xhr.responseText!==""){request.success=true;xhr.jsdo._session._saveClientContextId(xhr);if(typeof xhr.onSuccessFn=="function"){var operation;if(xhr.request.fnName!==undefined&&xhr.jsdo._resource.fn[xhr.request.fnName]!==undefined){operation=xhr.jsdo._resource.fn[xhr.request.fnName].operation}else operation=null;if(operation===undefined||operation!==null&&operation.mergeMode)xhr.jsdo._mergeInvoke(request.response,xhr);if(request.success)xhr.onSuccessFn(xhr.jsdo,request.success,request);else if(typeof xhr.onErrorFn=="function")xhr.onErrorFn(xhr.jsdo,request.success,request)}}else{request.success=false;if(xhr.status===0){request.exception=new Error(msg.getMsgText("jsdoMSG101"))}if(typeof xhr.onErrorFn=="function"){xhr.onErrorFn(xhr.jsdo,request.success,request)}}}catch(e){request.success=false;request.exception=e;if(typeof xhr.onErrorFn=="function"){xhr.onErrorFn(xhr.jsdo,request.success,request)}}xhr.jsdo._session._checkServiceResponse(xhr,request.success,request);if(typeof xhr.onCompleteFn=="function"){xhr.onCompleteFn(xhr.jsdo,request.success,request)}}catch(e){request.success=false;request.exception=e;if(typeof xhr.onErrorFn=="function"){xhr.onErrorFn(xhr.jsdo,request.success,request)}}}};this.acceptChanges=function(){for(var buf in this._buffers){this._buffers[this._buffers[buf]._name].acceptChanges()}};this.rejectChanges=function(){for(var buf in this._buffers){this._buffers[this._buffers[buf]._name].rejectChanges()}};this.getChanges=function(){var result=[];for(var buf in this._buffers){var changes=this._buffers[this._buffers[buf]._name].getChanges();result=result.concat(changes)}return result};this.hasChanges=function(){for(var buf in this._buffers){if(this._buffers[this._buffers[buf]._name].hasChanges())return true}return false};this._applyChanges=function(){for(var buf in this._buffers){this._buffers[this._buffers[buf]._name]._applyChanges()}};this.acceptRowChanges=function(){if(this._defaultTableRef)return this._defaultTableRef.acceptRowChanges();throw new Error(msg.getMsgText("jsdoMSG001","acceptRowChanges()"))};this.rejectRowChanges=function(){if(this._defaultTableRef)return this._defaultTableRef.rejectRowChanges();throw new Error(msg.getMsgText("jsdoMSG001","rejectRowChanges()"))};this.setProperties=function(propertiesObject){var prop;if(arguments.length<1){throw new Error(progress.data._getMsgText("jsdoMSG122","JSDO","setProperties",1))}if(arguments.length>1){throw new Error(progress.data._getMsgText("jsdoMSG122","JSDO","setProperties",1))}if(typeof propertiesObject=="object"){this._properties={};for(prop in propertiesObject){if(propertiesObject.hasOwnProperty(prop)){if(typeof propertiesObject[prop]!=="function"){this._properties[prop]=propertiesObject[prop]}}}}else if(propertiesObject===undefined||propertiesObject===null){this._properties={}}else{throw new Error(progress.data._getMsgText("jsdoMSG121","JSDO",1,"Object","setProperties"))}};this.setProperty=function(propertyName,propertyValue){if(arguments.length<2){throw new Error(progress.data._getMsgText("jsdoMSG122","JSDO","setProperty",2))}if(arguments.length!==2){throw new Error(progress.data._getMsgText("jsdoMSG122","JSDO","setProperty",2))}if(typeof propertyName!=="string"){throw new Error(progress.data._getMsgText("jsdoMSG121","JSDO",1,"string","setProperty"))}if(propertyValue===undefined){delete this._properties[propertyName]}else{this._properties[propertyName]=propertyValue}};this.getProperties=function(){if(arguments.length>0){throw new Error(progress.data._getMsgText("jsdoMSG122","JSDO","getProperties",0))}return this._properties};this.getProperty=function(propertyName){if(arguments.length<1){throw new Error(progress.data._getMsgText("jsdoMSG122","JSDO","getProperty",1))}if(arguments.length>1){throw new Error(progress.data._getMsgText("jsdoMSG122","JSDO","getProperty",1))}return this._properties[propertyName]};this.saveLocal=function saveLocal(arg1,arg2){var name;var dataMode;if(arguments.length>2){throw new Error(msg.getMsgText("jsdoMSG024","JSDO",arguments.callee.name+"()"))}if(typeof arg1=="string"||arg1===null||arg1===undefined){name=arg1;dataMode=arg2}else{name=null;dataMode=arg1}if(name===undefined||name===null||name===""){name="jsdo_"+this._resource.service.name+"_"+this._resource.name}if(typeof dataMode=="undefined"){dataMode=progress.data.JSDO.ALL_DATA}else{switch(dataMode){case progress.data.JSDO.ALL_DATA:case progress.data.JSDO.CHANGES_ONLY:break;default:throw new Error(msg.getMsgText("jsdoMSG115",arguments.callee.name))}}if(this._localStorage===null){this._localStorage=new progress.data.LocalStorage}var dataObj=this._prepareDataObjectForLocalStorage(dataMode);this._localStorage.saveToLocalStorage(name,dataObj)};this.readLocal=function readLocal(name){if(arguments.length>1){throw new Error(msg.getMsgText("jsdoMSG024","JSDO",arguments.callee.name+"()"))}if(name===undefined||name===null||name===""){name="jsdo_"+this._resource.service.name+"_"+this._resource.name}else if(typeof name!="string"){throw new Error(msg.getMsgText("jsdoMSG116","name",arguments.callee.name+"()"))}if(this._localStorage===null){this._localStorage=new progress.data.LocalStorage}var object=this._localStorage.readFromLocalStorage(name);if(object){if(this._hasMatchingSchema(object)===false)throw new Error(msg.getMsgText("jsdoMSG117",name));this._restoreFromLocalStorage(object,progress.data.JSDO.MODE_EMPTY)}return object!==null};this.addLocalRecords=function addLocalRecords(arg1,arg2,arg3){var name;var addMode;var keyFields;if(arguments.length<1){throw new Error(msg.getMsgText("jsdoMSG024","JSDO",arguments.callee.name+"()"))}if(typeof arg1=="string"){name=arg1;addMode=arg2;keyFields=arg3}else{name="jsdo_"+this._resource.service.name+"_"+this._resource.name;addMode=arg1;keyFields=arg2}if(typeof name=="undefined"||name===null||name===""){name="jsdo_"+this._resource.service.name+"_"+this._resource.name}else if(typeof name!="string"){throw new Error(msg.getMsgText("jsdoMSG116","name",arguments.callee.name+"()"))}if(addMode!=progress.data.JSDO.MODE_REPLACE){throw new Error(msg.getMsgText("jsdoMSG115",arguments.callee.name))}if(this._localStorage===null){this._localStorage=new progress.data.LocalStorage}var object=this._localStorage.readFromLocalStorage(name);if(object){if(this._hasMatchingSchema(object)===false)throw new Error(msg.getMsgText("jsdoMSG117",name));try{this._restoreFromLocalStorage(object,addMode,keyFields)}catch(e){var text=e.message;throw new Error(text.replace(new RegExp("addRecords","g"),"addLocalRecords"))}}return object!==null};this._containsPrimaryKeys=function _containsPrimaryKeys(){for(var buf in this._buffers){if(this._buffers[buf]._primaryKeys===null)return false}return true};this._hasMatchingSchema=function _hasMatchingSchema(storageObject){var isValid=true;if(storageObject===null||Object.keys(storageObject).length===0)return true;if(this._dataSetName){if(storageObject[this._dataSetName]){for(var buf in this._buffers)if(storageObject[this._dataSetName][buf]===undefined){isValid=false;break}}else isValid=false}else if(this._dataProperty){storageObject=storageObject["_localStorage"];if(storageObject===undefined||storageObject[this._dataProperty]===undefined)isValid=false}else{storageObject=storageObject["_localStorage"];if(storageObject===undefined||storageObject[this._defaultTableRef._name]===undefined)isValid=false}return isValid};this.deleteLocal=function deleteLocal(name){if(arguments.length>1){throw new Error(msg.getMsgText("jsdoMSG024","JSDO",arguments.callee.name+"()"))}if(name===undefined||name===null||name===""){name="jsdo_"+this._resource.service.name+"_"+this._resource.name}else if(typeof name!="string"){throw new Error(msg.getMsgText("jsdoMSG116","name",arguments.callee.name+"()"))}if(this._localStorage===null){this._localStorage=new progress.data.LocalStorage}this._localStorage.clearLocalStorage(name)};this._prepareDataObjectForLocalStorage=function(option){var storageObject={};if(this._dataSetName){switch(option){case progress.data.JSDO.ALL_DATA:storageObject=this._createDataAndChangeSet(this._dataSetName);break;case progress.data.JSDO.CHANGES_ONLY:storageObject=this._createChangeSet(this._dataSetName,true);break}}else if(this._dataProperty){switch(option){case progress.data.JSDO.ALL_DATA:storageObject=this._createDataAndChangeSet("_localStorage");break;case progress.data.JSDO.CHANGES_ONLY:storageObject=this._createChangeSet("_localStorage",true);break}}else{switch(option){case progress.data.JSDO.ALL_DATA:storageObject=this._createDataAndChangeSet("_localStorage");break;case progress.data.JSDO.CHANGES_ONLY:storageObject=this._createChangeSet("_localStorage",true);break}}return storageObject};this._restoreFromLocalStorage=function(storageObject,addMode,keyFields){if(storageObject&&Object.keys(storageObject).length>0){if(this._dataSetName){for(var buf in this._buffers)this._restoreDataForTable(this._buffers[buf],storageObject,addMode,keyFields)}else this._restoreDataForTable(this._defaultTableRef,storageObject,addMode,keyFields)}else if(addMode===progress.data.JSDO.MODE_EMPTY)this._clearData()};this._restoreDataForTable=function(tableRef,jsonObject,addMode,keyFields){keyFields=keyFields!==undefined?keyFields:tableRef._primaryKeys;if(keyFields===undefined&&this._resource.idProperty){keyFields=[];keyFields[0]=this._resource.idProperty}if(this._dataSetName){var oldUseRelationships=this.useRelationships;this.useRelationships=false;try{tableRef.addRecords(jsonObject,addMode,keyFields)}finally{this.useRelationships=oldUseRelationships}}else{this._dataSetName="_localStorage";tableRef.addRecords(jsonObject,addMode,keyFields);this._dataSetName=null}};this.getMethodProperties=function(operation,name){var idx;if(this._resource._operations){if(this._resource._operations[operation]){return this._resource._operations[operation]}}else{this._resource._operations={}}for(var idx=0;idx1?[params.sort]:[]}sortFields="";for(index=0;index=1?params.filter:undefined}if(params.filter){if(typeof params.filter==="string"){doConversion=false}params.tableRef=tableName;if(doConversion&¶ms.tableRef===undefined){throw new Error(msg.getMsgText("jsdoMSG045","fill() or read()","params","tableRef"))}if(reqCapabilities["filter"].mapping==="ablFilter"){if(doConversion){ablFilter=progress.util._convertToABLWhereString(jsdo._buffers[params.tableRef],params.filter)}else{ablFilter=params.filter}}else if(reqCapabilities["filter"].mapping==="sqlQuery"){if(doConversion){sqlQuery=progress.util._convertToSQLQueryString(jsdo._buffers[params.tableRef],params.filter,true)}else{sqlQuery=params.filter}}}filter=JSON.stringify({ablFilter:ablFilter,tableRef:params.tableRef,viewTables:jsdo.viewTables,sqlQuery:sqlQuery,orderBy:sortFields,skip:params.skip,top:params.top,id:params.id});params={filter:filter}}return params}});if(typeof progress.ui=="undefined")progress.ui={};progress.ui.UITableRef=function UITableRef(tableRef){this._tableRef=tableRef;this._listview=null;this._detailPage=null;this._listviewContent=undefined;this.addItem=function(format){var detailForm;if(!this._tableRef.record)throw new Error(msg.getMsgText("jsdoMSG002",this._name));if(!this._listview)return;format=format?format:this._listview.format;detailForm=this._detailPage&&this._detailPage.name?this._detailPage.name:"";if(this._listviewContent===undefined){this.clearItems()}var text=this._listview.itemTemplate?this._listview.itemTemplate:progress.ui.UIHelper._itemTemplate;text=text.replace(new RegExp("{__format__}","g"),format);text=text.replace(new RegExp("{__id__}","g"),this._tableRef.record.data._id);text=text.replace(new RegExp("{__page__}","g"),detailForm);for(var field in this._tableRef.record.data){var value=this._tableRef.record.data[field];text=text.replace(new RegExp("{"+field+"}","g"),value!==undefined&&value!==null?value:"")}this._listviewContent+=text};this.clearItems=function(){if(this._listview){this._listviewContent="";var listviewElement=document.getElementById(this._listview.name);if(listviewElement){listviewElement.innerHTML=""}}};this._getFormFieldValue=function(fieldName,detailPageName){var value=null,field;if(detailPageName===undefined){if(this._detailPage&&this._detailPage.name)detailPageName=this._detailPage.name}if(typeof $=="function"&&detailPageName){field=$("#"+detailPageName+" #"+fieldName);if(!field||field.length===0)field=$("#"+detailPageName+' [dsid="'+fieldName+'"]');if(field&&field.length==1)value=field.val()}else{field=document.getElementById(fieldName);if(field){value=field.value}}return value};this._setFormField=function(fieldName,value,detailPageName){var field=null;if(detailPageName===undefined){if(this._detailPage&&this._detailPage.name)detailPageName=this._detailPage.name}if(typeof $=="function"&&detailPageName){field=$("#"+detailPageName+" #"+fieldName);if(!field||field.length===0)field=$("#"+detailPageName+' [dsid="'+fieldName+'"]');if(field&&field.length==1)field.val(value)}else{field=document.getElementById(fieldName);if(field){field.value=value}}};this.assign=function(detailPageName){if(!this._tableRef.record)throw new Error(msg.getMsgText("jsdoMSG002",this._tableRef._name));if(arguments.length!==0&&typeof detailPageName!="string")throw new Error(msg.getMsgText("jsdoMSG024","UIHelper","assign()"));this._tableRef.record.assign(null);var fieldName;var schema=this._tableRef.getSchema();for(var i=0;i0){for(var i=0;i0&&fieldName.charAt(0)=="_")continue;if(fields&&fields[fieldName]===undefined)continue;var fieldLabel=this._tableRef._schema[i].title?this._tableRef._schema[i].title:this._tableRef._schema[i].name;var text=this._detailPage&&this._detailPage.fieldTemplate?this._detailPage.fieldTemplate:progress.ui.UIHelper._fieldTemplate;text=text.replace(new RegExp("{__label__}","g"),fieldLabel);text=text.replace(new RegExp("{__name__}","g"),this._tableRef._schema[i].name);htmltext+=text}htmltext+="";fields=null;return htmltext};this.getListViewRecord=function(htmlIElement){var id=htmlIElement.getAttribute("data-id");return this._tableRef.findById(id)};this.getFormRecord=function(detailPageName){var id=this._getFormFieldValue("_id",detailPageName);return this._tableRef.findById(id)};this._getIdOfElement=function(name){if(typeof $=="function"){var element=$("#"+name);if(!element||element.length===0){element=$('[dsid="'+name+'"]');if(element&&element.length==1){var id=element.attr("id");if(id)return id}}}return name};this.setDetailPage=function setDetailPage(obj){if(!obj||typeof obj!="object")throw new Error(msg.getMsgText("jsdoMSG012",arguments.callee.name,"object"));if(!obj.name||typeof obj.name!="string")throw new Error(msg.getMsgText("jsdoMSG012",arguments.callee.name,"name"));this._detailPage=obj;this._detailPage.name=this._getIdOfElement(this._detailPage.name)};this.setListView=function setListView(obj){if(!obj||typeof obj!="object")throw new Error(msg.getMsgText("jsdoMSG012",arguments.callee.name,"object"));if(!obj.name||typeof obj.name!="string")throw new Error(msg.getMsgText("jsdoMSG012",arguments.callee.name,"name"));if(obj.format&&typeof obj.name!="string")throw new Error(msg.getMsgText("jsdoMSG012",arguments.callee.name,"format"));this._listview=obj;this._listview.name=this._getIdOfElement(this._listview.name);if(!this._listview.format){if(typeof $=="function"){for(var i=0;i{__format__}';progress.ui.UIHelper._defaultFieldTemplate='
'+''+'
';progress.ui.UIHelper._itemTemplate=progress.ui.UIHelper._defaultItemTemplate;progress.ui.UIHelper._fieldTemplate=progress.ui.UIHelper._defaultFieldTemplate;progress.ui.UIHelper.setItemTemplate=function(template){progress.ui.UIHelper._itemTemplate=template?template:progress.ui.UIHelper._defaultItemTemplate};progress.ui.UIHelper.setFieldTemplate=function(template){progress.ui.UIHelper._fieldTemplate=template?template:progress.ui.UIHelper._defaultFieldTemplate}})();(function(){if(progress===undefined){progress={}}if(progress.data===undefined){progress.data={}}progress.data.ServicesManager={};progress.data.ServicesManager._services=[];progress.data.ServicesManager._resources=[];progress.data.ServicesManager._data=[];progress.data.ServicesManager._sessions=[];progress.data.ServicesManager._jsdosessions=[];progress.data.ServicesManager.addResource=function(id,resource){if(progress.data.ServicesManager._resources[id]===undefined){progress.data.ServicesManager._resources[id]=resource}else{throw new Error("A resource named '"+id+"' was already loaded.")}};progress.data.ServicesManager.getResource=function(id){return progress.data.ServicesManager._resources[id]};progress.data.ServicesManager.addService=function(id,service){if(progress.data.ServicesManager._services[id]===undefined){progress.data.ServicesManager._services[id]=service}else{throw new Error("A service named '"+id+"' was already loaded.")}};progress.data.ServicesManager.getService=function(id){return progress.data.ServicesManager._services[id]};progress.data.ServicesManager.addSession=function(catalogURI,session){if(progress.data.ServicesManager._sessions[catalogURI]===undefined){progress.data.ServicesManager._sessions[catalogURI]=session}else{throw new Error("Cannot load catalog '"+catalogURI+"' multiple times.")}};progress.data.ServicesManager.addJSDOSession=function(catalogURI,jsdosession){if(progress.data.ServicesManager._jsdosessions[catalogURI]===undefined){progress.data.ServicesManager._jsdosessions[catalogURI]=jsdosession}else{throw new Error("Cannot load catalog '"+catalogURI+"' multiple times.")}};progress.data.ServicesManager.getSession=function(catalogURI){try{return progress.data.ServicesManager._sessions[catalogURI]}catch(e){return null}};progress.data.ServicesManager.cleanSession=function(session){var servicesKey,resourcesKey,sessionsKey,service,services=progress.data.ServicesManager._services,resources=progress.data.ServicesManager._resources,sessions=progress.data.ServicesManager._sessions,jsdosessions=progress.data.ServicesManager._jsdosessions;for(servicesKey in services){service=null;if(services[servicesKey]._session===session){service=services[servicesKey];delete services[servicesKey]}if(!service){continue}for(resourcesKey in resources){if(resources[resourcesKey].service===service){delete resources[resourcesKey]}}}for(sessionsKey in sessions){if(sessions[sessionsKey]===session){delete sessions[sessionsKey];if(jsdosessions[sessionsKey]){delete jsdosessions[sessionsKey]}}}};function extractParamsFromURL(url){var urlParams=[],paramName=null;if(typeof url==="string"){url.split("").forEach(function(c){if(c==="{"){paramName=""}else if(c==="}"){if(paramName){urlParams.push(paramName)}paramName=null}else if(paramName!==null){paramName+=c}})}return urlParams}progress.data.ServicesManager.addCatalog=function(services,session){var name,value;if(!services){throw new Error("Cannot find 'services' property in catalog file.")}if(services instanceof Array){services.forEach(function(service){if(progress.data.ServicesManager.getService(service.name)!==undefined){throw new Error("A service named '"+service.name+"' was already loaded.")}if(service.resources instanceof Array){service.resources.forEach(function(resource){if(progress.data.ServicesManager.getResource(resource.name)!==undefined){throw new Error("A resource named '"+resource.name+"' was already loaded.")}})}else{throw new Error("Missing 'resources' array in catalog.")}});for(var j=0;j1){throw new Error(progress.data._getMsgText("jsdoMSG122","Session","setContext",1))}if(typeof context==="object"){contextObject={};for(prop in context){if(context.hasOwnProperty(prop)){if(typeof context[prop]!=="function"){contextObject[prop]=context[prop]}}}}else if(context===undefined||context===null){contextObject={}}else{throw new Error(progress.data._getMsgText("jsdoMSG121","Session",1,"Object","setContextProperty"))}contextString=null};this.getContext=function(){if(arguments.length>0){throw new Error(progress.data._getMsgText("jsdoMSG122","Session","getContext",0))}return contextObject};this.getContextProperty=function(propertyName){if(arguments.length<1){throw new Error(progress.data._getMsgText("jsdoMSG122","Session","getContextProperty",1))}if(arguments.length>1){throw new Error(progress.data._getMsgText("jsdoMSG122","Session","getContextProperty",1))}return contextObject[propertyName]}};progress.data.Session=function Session(options){var defPropSupported=false;if(typeof Object.defineProperty==="function"){defPropSupported=true}var that=this,jsdosession,isUserAgentiOS=false,isFirefox=false,isEdge=false,isIE=false,canPassCredentialsToOpenWithCORS=false,defaultiOSBasicAuthTimeout=4e3,deviceIsOnline=true,restApplicationIsOnline=false,oepingAvailable=false,hasResolvedPingURI=false,defaultPartialPingURI="/rest/_oepingService/_oeping",classicPartialPingURI="/rest/_oeping",partialPingURI=defaultPartialPingURI,_storageKey,_authProvider=null,customCredentials=false,storedAuthModel,storedURI,newURI,stateWasReadFromStorage=false;if(!options||options._silent!==true){console.warn("Session: As of JSDO 4.4, the Session object has been deprecated. "+"Please use the JSDOSession object instead.")}if(typeof navigator!=="undefined"){if(typeof navigator.userAgent!=="undefined"){isUserAgentiOS=navigator.userAgent.match(/(iPad)|(iPhone)|(iPod)/i);isFirefox=navigator.userAgent.toLowerCase().indexOf("firefox")>-1;isEdge=navigator.userAgent.indexOf("Edge/")>-1;isIE=navigator.userAgent.indexOf("Trident/")>-1||navigator.userAgent.indexOf("MSIE 10")>-1}}canPassCredentialsToOpenWithCORS=!(isFirefox||isEdge||isIE);function canPassCredentialsToOpen(){return canPassCredentialsToOpenWithCORS}this._onlineHandler=function(){setDeviceIsOnline(true);that.trigger("online",that,null)};this._offlineHandler=function(){setDeviceIsOnline(false);that.trigger("offline",that,progress.data.Session.DEVICE_OFFLINE,null)};if(typeof window!=="undefined"&&window.addEventListener){window.addEventListener("online",this._onlineHandler,false);window.addEventListener("offline",this._offlineHandler,false)}var _catalogURIs=[];var _services=[];var _jsdos=[];this.onOpenRequest=null;var _password=null;if(defPropSupported){var _userName=null;Object.defineProperty(this,"userName",{get:function(){return _userName},enumerable:true});var _loginTarget="/static/home.html";Object.defineProperty(this,"loginTarget",{get:function(){return _loginTarget},enumerable:true});var _serviceURI=null;Object.defineProperty(this,"serviceURI",{get:function(){return _serviceURI},enumerable:true});Object.defineProperty(this,"catalogURIs",{get:function(){return _catalogURIs},enumerable:true});Object.defineProperty(this,"services",{get:function(){return _services},enumerable:true});var _loginResult=null;Object.defineProperty(this,"loginResult",{get:function(){return _loginResult},enumerable:true});var _loginHttpStatus=null;Object.defineProperty(this,"loginHttpStatus",{get:function(){return _loginHttpStatus},enumerable:true});var _clientContextId=null;Object.defineProperty(this,"clientContextId",{get:function(){return _clientContextId},enumerable:true});var _authenticationModel=progress.data.Session.AUTH_TYPE_ANON;Object.defineProperty(this,"authenticationModel",{get:function(){return _authenticationModel},set:function(newval){if(newval){newval=newval.toLowerCase()}switch(newval){case progress.data.Session.AUTH_TYPE_FORM:case progress.data.Session.AUTH_TYPE_BASIC:case progress.data.Session.AUTH_TYPE_ANON:case progress.data.Session.AUTH_TYPE_SSO:case progress.data.Session.AUTH_TYPE_BEARER:case null:_authenticationModel=newval;storeSessionInfo("authenticationModel",newval);break;default:throw new Error("Error setting Session.authenticationModel. '"+newval+"' is an invalid value.")}},enumerable:true});var _lastSessionXHR=null;Object.defineProperty(this,"lastSessionXHR",{get:function(){return _lastSessionXHR},enumerable:true});Object.defineProperty(this,"connected",{get:function(){return this.loginResult===progress.data.Session.LOGIN_SUCCESS&&restApplicationIsOnline&&deviceIsOnline},enumerable:true});Object.defineProperty(this,"JSDOs",{get:function(){return _jsdos},enumerable:true});var _pingInterval=0;var _timeoutID=null;Object.defineProperty(this,"pingInterval",{get:function(){return _pingInterval},set:function(newval){if(typeof newval==="number"&&newval>=0){_pingInterval=newval;storeSessionInfo("pingInterval",newval);if(newval>0){if(this.loginResult===progress.data.Session.LOGIN_SUCCESS){_timeoutID=setTimeout(this._autoping,newval)}}else if(newval===0){clearTimeout(_timeoutID);_pingInterval=0}}else{throw new Error("Error setting Session.pingInterval. '"+newval+"' is an invalid value.")}},enumerable:true});var _contextProperties=new progress.data.ContextProperties;Object.defineProperty(this,"_contextProperties",{get:function(){return _contextProperties},enumerable:false});var isInvalidated=false;Object.defineProperty(this,"_isInvalidated",{get:function(){return isInvalidated},enumerable:false});Object.defineProperty(this,"_authProvider",{get:function(){return _authProvider},set:function(newval){if(_authProvider){throw new Error("Internal Error setting Session._authProvider. '"+"The property has already been set.")}setAuthProvider(newval)},enumerable:false})}else{this.userName=null;this.loginTarget="/static/home.html";this.serviceURI=null;this.catalogURIs=[];this.services=[];this.loginResult=null;this.loginHttpStatus=null;this.clientContextId=null;this.authenticationModel=progress.data.Session.AUTH_TYPE_ANON;this.lastSessionXHR=null}function storeSessionInfo(infoName,value){var key;if(that.loginResult===progress.data.Session.LOGIN_SUCCESS&&typeof sessionStorage==="object"&&_storageKey){key=_storageKey;if(infoName){key=key+"."+infoName}if(typeof value!=="undefined"){sessionStorage.setItem(key,JSON.stringify(value))}}}function retrieveSessionInfo(infoName){var key,jsonStr,value=null;if(typeof sessionStorage==="object"&&_storageKey){key=_storageKey;if(infoName){key=key+"."+infoName}jsonStr=sessionStorage.getItem(key);if(jsonStr!==null){try{value=JSON.parse(jsonStr)}catch(e){value=null}}return value}}function clearSessionInfo(infoName){var key;if(typeof sessionStorage==="object"&&_storageKey){key=_storageKey;if(infoName){key=key+"."+infoName;sessionStorage.removeItem(key)}}}function storeAllSessionInfo(){if(_storageKey){storeSessionInfo("loginResult",that.loginResult);storeSessionInfo("userName",that.userName);storeSessionInfo("serviceURI",that.serviceURI);storeSessionInfo("loginHttpStatus",that.loginHttpStatus);storeSessionInfo("authenticationModel",that.authenticationModel);storeSessionInfo("pingInterval",that.pingInterval);storeSessionInfo("oepingAvailable",oepingAvailable);storeSessionInfo("partialPingURI",partialPingURI);storeSessionInfo("clientContextId",that.clientContextId);storeSessionInfo("deviceIsOnline",deviceIsOnline);storeSessionInfo("restApplicationIsOnline",restApplicationIsOnline);if(that._authProvider){storeSessionInfo("_authProvider.init",{uri:that._authProvider.uri,authenticationModel:that._authProvider.authenticationModel})}storeSessionInfo(_storageKey,true)}}function clearAllSessionInfo(){if(_storageKey){if(retrieveSessionInfo(_storageKey)){clearSessionInfo("loginResult");clearSessionInfo("userName");clearSessionInfo("serviceURI");clearSessionInfo("loginHttpStatus");clearSessionInfo("clientContextId");clearSessionInfo("deviceIsOnline");clearSessionInfo("restApplicationIsOnline");clearSessionInfo("authenticationModel");clearSessionInfo("pingInterval");clearSessionInfo("oepingAvailable");clearSessionInfo("partialPingURI");clearSessionInfo("_authProvider.init");clearSessionInfo(_storageKey)}}}function setSessionInfoFromStorage(key){var authproviderInitObject;if(retrieveSessionInfo(key)){setLoginResult(retrieveSessionInfo("loginResult"),this);setUserName(retrieveSessionInfo("userName"),this);setServiceURI(retrieveSessionInfo("serviceURI"),this);setLoginHttpStatus(retrieveSessionInfo("loginHttpStatus"),this);setClientContextID(retrieveSessionInfo("clientContextId"),this);setDeviceIsOnline(retrieveSessionInfo("deviceIsOnline"));setRestApplicationIsOnline(retrieveSessionInfo("restApplicationIsOnline"));that.authenticationModel=retrieveSessionInfo("authenticationModel");that.pingInterval=retrieveSessionInfo("pingInterval");setOepingAvailable(retrieveSessionInfo("oepingAvailable"));setPartialPingURI(retrieveSessionInfo("partialPingURI"));if(!that._authProvider){authproviderInitObject=retrieveSessionInfo("_authProvider.init");if(authproviderInitObject){setAuthProvider(new progress.data.AuthenticationProvider(authproviderInitObject))}}}}function setUserName(newname,sessionObject){if(defPropSupported){_userName=newname}else{sessionObject.userName=newname}storeSessionInfo("userName",newname)}function setLoginTarget(target,sessionObject){if(defPropSupported){_loginTarget=target}else{sessionObject.loginTarget=target}}function setServiceURI(url,sessionObject){if(defPropSupported){_serviceURI=url}else{sessionObject.serviceURI=url}storeSessionInfo("serviceURI",url)}function pushCatalogURIs(url,sessionObject){if(defPropSupported){_catalogURIs.push(url)}else{sessionObject.catalogURIs.push(url)}}function pushService(serviceObject,sessionObject){if(defPropSupported){_services.push(serviceObject)}else{sessionObject.services.push(serviceObject)}}function findService(serviceName){_services.forEach(function(service){if(service.name===serviceName){return service}});return null}function setLoginResult(result,sessionObject){if(defPropSupported){_loginResult=result}else{sessionObject.loginResult=result}if(result===progress.data.Session.LOGIN_SUCCESS){storeSessionInfo("loginResult",result)}else{clearAllSessionInfo()}}function setLoginHttpStatus(status,sessionObject){if(defPropSupported){_loginHttpStatus=status}else{sessionObject.loginHttpStatus=status}storeSessionInfo("loginHttpStatus",status)}function setClientContextIDfromXHR(xhr,sessionObject){if(xhr){setClientContextID(getResponseHeaderNoError(xhr,"X-CLIENT-CONTEXT-ID"),sessionObject)}}function setClientContextID(ccid,sessionObject){if(defPropSupported){_clientContextId=ccid}else{sessionObject.clientContextId=ccid}storeSessionInfo("clientContextId",ccid)}function setLastSessionXHR(xhr,sessionObject){if(defPropSupported){_lastSessionXHR=xhr}else{sessionObject.lastSessionXHR=xhr}}function setDeviceIsOnline(value){deviceIsOnline=value;storeSessionInfo("deviceIsOnline",value)}function setAuthProvider(value){_authProvider=value?value:null}function setRestApplicationIsOnline(value){restApplicationIsOnline=value;storeSessionInfo("restApplicationIsOnline",value)}function setOepingAvailable(value){oepingAvailable=value;storeSessionInfo("oepingAvailable",value)}function setPartialPingURI(value){partialPingURI=value;storeSessionInfo("partialPingURI",value)}function getResponseHeaderNoError(xhr,headerName){var allHeaders=xhr._pdsResponseHeaders,regExp;if(allHeaders===undefined){allHeaders=xhr.getAllResponseHeaders();if(allHeaders){xhr._pdsResponseHeaders=allHeaders}else{xhr._pdsResponseHeaders=null}}if(allHeaders){regExp=new RegExp("^"+headerName+":","mi");if(allHeaders.match(regExp)){return xhr.getResponseHeader(headerName)}}return null}this._pushJSDOs=function(jsdo){_jsdos.push(jsdo)};this._openRequest=function(xhr,verb,url,async,callback){var urlPlusCCID,that=this;function afterOpenAndAuthorize(arg){if(arg instanceof Error){throw arg}else{if(that.clientContextId&&that.clientContextId!=="0"){xhr.setRequestHeader("X-CLIENT-CONTEXT-ID",that.clientContextId)}setRequestHeaderFromContextProps(that,xhr);if(typeof that.onOpenRequest==="function"){var params={xhr:xhr,verb:verb,uri:urlPlusCCID,async:async,formPreTest:false,session:that};that.onOpenRequest(params)}if(callback){callback()}}}if(this._isInvalidated){throw new Error(progress.data._getMsgText("jsdoMSG510","Session"))}if(this.loginResult!==progress.data.Session.LOGIN_SUCCESS&&!this._authProvider&&this.authenticationModel){throw new Error("Attempted to make server request when there is no active session.")}urlPlusCCID=this._prependAppURL(url);urlPlusCCID=this._addCCIDtoURL(urlPlusCCID);if(progress.data.Session._useTimeStamp){urlPlusCCID=progress.data.Session._addTimeStampToURL(urlPlusCCID)}if(this._authProvider){this._authProvider._openRequestAndAuthorize(xhr,verb,urlPlusCCID,async,afterOpenAndAuthorize)}else{this._setXHRCredentials(xhr,verb,urlPlusCCID,this.userName,_password,async);if(this.authenticationModel===progress.data.Session.AUTH_TYPE_FORM){_addWithCredentialsAndAccept(xhr,"application/json")}afterOpenAndAuthorize(xhr)}};this.pingTestCallback=function(cbArgs){var foundOeping=cbArgs.pingResult?true:false;setOepingAvailable(foundOeping)};this._onReadyStateChangeGeneric=function(){var xhr=this;var result;var errorObject;clearTimeout(xhr._requestTimeout);if(xhr.readyState===4){result=null;errorObject=null;if(typeof xhr.onResponseFn==="function"){try{result=xhr.onResponseFn(xhr)}catch(e){errorObject=e}}if(typeof xhr.onResponseProcessedFn==="function"){if(!result){result=progress.data.Session.GENERAL_FAILURE}xhr.onResponseProcessedFn(xhr.pdsession,result,errorObject,xhr)}}};this._disconnect=function(deferred){this._processDisconnectResult(null,deferred)};this._processDisconnectResult=function(xhr,deferred){this._reinitializeAfterLogout(this,progress.data.Session.SUCCESS);this._disconnectComplete(this,progress.data.Session.SUCCESS,null,null,deferred)};this._disconnectComplete=function(pdsession,result,errObj,xhr,deferred){pdsession.trigger("afterDisconnect",pdsession,result,errObj,xhr,deferred)};var pwSave=null;var unameSave=null;this.login=function(serviceURI,loginUserName,loginPassword,loginTarget){var uname,pw,isAsync=false,args=[],deferred,iOSBasicAuthTimeout,uriForRequest;pwSave=null;unameSave=null;if(!defPropSupported){this.authenticationModel=this.authenticationModel.toLowerCase()}if(this.authenticationModel===progress.data.Session.AUTH_TYPE_SSO){throw new Error(progress.data._getMsgText("jsdoMSG057","Session","login()"))}if(this.loginResult===progress.data.Session.LOGIN_SUCCESS||this._authProvider){throw new Error("Attempted to call login() on a Session object that is already logged in.")}if(arguments.length>0){if(arguments[0]&&typeof arguments[0]==="object"){args[0]=arguments[0].serviceURI;args[1]=arguments[0].userName;args[2]=arguments[0].password;args[3]=arguments[0].loginTarget;args[4]=arguments[0].async;deferred=arguments[0].deferred;iOSBasicAuthTimeout=arguments[0].iOSBasicAuthTimeout;if(typeof iOSBasicAuthTimeout==="undefined"){iOSBasicAuthTimeout=defaultiOSBasicAuthTimeout}else if(iOSBasicAuthTimeout&&typeof iOSBasicAuthTimeout!=="number"){throw new Error(progress.data._getMsgText("jsdoMSG033","Session","login","The iOSBasicAuthTimeout argument was invalid."))}}else{args=arguments}}if(args.length>0){if(args[0]){var restURLtemp=args[0];if(restURLtemp[restURLtemp.length-1]==="/"){restURLtemp=restURLtemp.substring(0,restURLtemp.length-1)}setServiceURI(restURLtemp,this)}else if(!this.serviceURI){setLoginResult(progress.data.Session.LOGIN_GENERAL_FAILURE,this);throw new Error("Session.login() is missing the serviceURI argument.")}if(args[1]){uname=args[1]}if(args[2]){pw=args[2]}if(args[3]){setLoginTarget(args[3],this)}if(args[4]){if(typeof args[4]==="boolean"){isAsync=args[4]}else{throw new Error("Session.login() was passed an async setting that is not a boolean.")}}}else{setLoginResult(progress.data.Session.LOGIN_GENERAL_FAILURE,this);throw new Error("Session.login() is missing the serviceURI argument.")}unameSave=uname;pwSave=pw;if(this.authenticationModel===progress.data.Session.AUTH_TYPE_ANON||this.authenticationModel===progress.data.Session.AUTH_TYPE_FORM){uname=null;pw=null}var xhr=new XMLHttpRequest;xhr.pdsession=this;try{uriForRequest=this.serviceURI+this.loginTarget;if(progress.data.Session._useTimeStamp){uriForRequest=progress.data.Session._addTimeStampToURL(uriForRequest)}this._setXHRCredentials(xhr,"GET",uriForRequest,uname,pw,isAsync);progress.data.Session._setNoCacheHeaders(xhr);setRequestHeaderFromContextProps(this,xhr);if(this.authenticationModel===progress.data.Session.AUTH_TYPE_FORM){_addWithCredentialsAndAccept(xhr,"application/json,text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")}xhr._isAsync=isAsync;if(isAsync){xhr.onreadystatechange=this._onReadyStateChangeGeneric;if(this.authenticationModel===progress.data.Session.AUTH_TYPE_FORM){xhr.onResponseFn=this._afterFormPretestLogin}else{xhr.onResponseFn=this._processLoginResult;xhr.onResponseProcessedFn=this._loginComplete}if(this.authenticationModel===progress.data.Session.AUTH_TYPE_BASIC&&isUserAgentiOS&&iOSBasicAuthTimeout>0){xhr._requestTimeout=setTimeout(function(){clearTimeout(xhr._requestTimeout);xhr._iosTimeOutExpired=true;xhr.abort()},iOSBasicAuthTimeout)}xhr._jsdosession=jsdosession;xhr._deferred=deferred}if(typeof this.onOpenRequest==="function"){var isFormPreTest=false;if(this.authenticationModel===progress.data.Session.AUTH_TYPE_FORM){isFormPreTest=true}setLastSessionXHR(xhr,this);var params={xhr:xhr,verb:"GET",uri:this.serviceURI+this.loginTarget,async:false,formPreTest:isFormPreTest,session:this};this.onOpenRequest(params);xhr=params.xhr}setLastSessionXHR(xhr,this);xhr.send(null)}catch(e){clearTimeout(xhr._requestTimeout);setLoginHttpStatus(xhr.status,this);setLoginResult(progress.data.Session.LOGIN_GENERAL_FAILURE,this);unameSave=null;pwSave=null;throw e}if(isAsync){return progress.data.Session.ASYNC_PENDING}else{setLoginHttpStatus(xhr.status,this);if(this.authenticationModel===progress.data.Session.AUTH_TYPE_FORM){return this._afterFormPretestLogin(xhr)}else{return this._processLoginResult(xhr)}}};this._afterFormPretestLogin=function(xhr){var pdsession=xhr.pdsession;setLoginHttpStatus(xhr.status,xhr.pdsession);var formLoginParams={xhr:xhr,pw:pwSave,uname:unameSave,theSession:pdsession};try{return doFormLogin(formLoginParams)}catch(e){pwSave=null;unameSave=null;throw e}};function doFormLogin(args){var xhr=args.xhr;var theSession=args.theSession;var oldXHR;var contentType=null;var needAuth=false;var params={session:theSession,xhr:xhr,statusFromjson:null};contentType=xhr.getResponseHeader("Content-Type");if(contentType&&contentType.indexOf("application/json")>=0){handleJSONLoginResponse(params);if(!params.statusFromjson||params.statusFromjson>=400&¶ms.statusFromjson<500){needAuth=true}else{setLoginHttpStatus(params.statusFromjson,theSession)}}else{if(theSession.loginHttpStatus===200){if(_gotLoginForm(xhr)){needAuth=true}}}if(needAuth){oldXHR=xhr;xhr=new XMLHttpRequest;args.xhr=xhr;params.xhr=xhr;xhr.pdsession=oldXHR.pdsession;xhr._isAsync=oldXHR._isAsync;xhr._deferred=oldXHR._deferred;xhr._jsdosession=oldXHR._jsdosession;xhr.open("POST",theSession.serviceURI+"/static/auth/j_spring_security_check",xhr._isAsync);xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");xhr.setRequestHeader("Cache-Control","max-age=0");setRequestHeaderFromContextProps(theSession,xhr);_addWithCredentialsAndAccept(xhr,"application/json");try{if(typeof theSession.onOpenRequest==="function"){var cbparams={xhr:xhr,verb:"POST",uri:theSession.serviceURI+"/static/auth/j_spring_security_check",async:xhr._isAsync,formPreTest:false,session:theSession};theSession.onOpenRequest(cbparams);xhr=cbparams.xhr}if(xhr._isAsync){xhr.onreadystatechange=theSession._onReadyStateChangeGeneric;xhr.onResponseFn=theSession._afterFormLogin;xhr.onResponseProcessedFn=theSession._loginComplete}xhr.send("j_username="+encodeURIComponent(args.uname)+"&j_password="+encodeURIComponent(args.pw)+"&submit=Submit")}catch(e){setLoginResult(progress.data.Session.LOGIN_GENERAL_FAILURE,theSession);setLoginHttpStatus(xhr.status,theSession);unameSave=null;pwSave=null;throw e}}if(xhr._isAsync&&!needAuth){xhr.onResponseProcessedFn=theSession._loginComplete;return theSession._afterFormLogin(xhr)}if(!xhr._isAsync){return theSession._afterFormLogin(xhr)}}this._afterFormLogin=function(xhr){var theSession=xhr.pdsession;var params={session:theSession,xhr:xhr,statusFromjson:null};var contentType=xhr.getResponseHeader("Content-Type");if(contentType&&contentType.indexOf("application/json")>=0){handleJSONLoginResponse(params);if(!params.statusFromjson){throw new Error("Internal OpenEdge Mobile client error handling login response. HTTP status: "+xhr.status+".")}setLoginHttpStatus(params.statusFromjson,theSession)}else{if(xhr.status===200){if(_gotLoginFailure(xhr)||_gotLoginForm(xhr)){setLoginHttpStatus(401,theSession)}else{setLoginHttpStatus(xhr.status,theSession)}}}return theSession._processLoginResult(xhr)};this._processLoginResult=function(xhr){var pdsession=xhr.pdsession;setLoginHttpStatus(xhr.status,xhr.pdsession);if(pdsession.loginHttpStatus===200){setLoginResult(progress.data.Session.LOGIN_SUCCESS,pdsession);setRestApplicationIsOnline(true);setUserName(unameSave,pdsession);_password=pwSave;pdsession._saveClientContextId(xhr);storeAllSessionInfo();var pingTestArgs={pingURI:null,async:true,onCompleteFn:null,fireEventIfOfflineChange:true,onReadyStateFn:pdsession._pingtestOnReadyStateChange};pingTestArgs.pingURI=pdsession._makePingURI();pdsession._sendPing(pingTestArgs)}else{if(pdsession.loginHttpStatus===401){setLoginResult(progress.data.Session.LOGIN_AUTHENTICATION_FAILURE,pdsession)}else{setLoginResult(progress.data.Session.LOGIN_GENERAL_FAILURE,pdsession)}}setLastSessionXHR(xhr,pdsession);updateContextPropsFromResponse(pdsession,xhr);unameSave=null;pwSave=null;if(xhr._iosTimeOutExpired){throw new Error(progress.data._getMsgText("jsdoMSG047","login"))}return pdsession.loginResult};this._loginComplete=function(pdsession,result,errObj,xhr){pdsession.trigger("afterLogin",pdsession,result,errObj,xhr)};this.logout=function(args){var isAsync=false,errorObject=null,xhr,deferred,params;if(this.authenticationModel===progress.data.Session.AUTH_TYPE_SSO){throw new Error(progress.data._getMsgText("jsdoMSG057","Session","logout()"))}if(this.loginResult!==progress.data.Session.LOGIN_SUCCESS&&this.authenticationModel){throw new Error("Attempted to call logout when there is no active session.")}if(typeof args==="object"){isAsync=args.async;if(isAsync&&typeof isAsync!=="boolean"){throw new Error(progress.data._getMsgText("jsdoMSG033","Session","logout","The async argument was invalid."))}deferred=args.deferred}xhr=new XMLHttpRequest;xhr.pdsession=this;try{xhr._jsdosession=jsdosession;xhr._deferred=deferred;if(this.authenticationModel===progress.data.Session.AUTH_TYPE_FORM||this.authenticationModel===progress.data.Session.AUTH_TYPE_BASIC||this.authenticationModel===progress.data.Session.AUTH_TYPE_BEARER){if(isAsync){xhr.onreadystatechange=this._onReadyStateChangeGeneric;xhr.onResponseFn=this._processLogoutResult;xhr.onResponseProcessedFn=this._logoutComplete}xhr.open("GET",this.serviceURI+"/static/auth/j_spring_security_logout",isAsync);try{xhr.withCredentials=true}catch(e){}xhr.setRequestHeader("Accept","application/json");setRequestHeaderFromContextProps(this,xhr);if(typeof this.onOpenRequest==="function"){setLastSessionXHR(xhr,this);params={xhr:xhr,verb:"GET",uri:this.serviceURI+"/static/auth/j_spring_security_logout",async:false,formPreTest:false,session:this};this.onOpenRequest(params);xhr=params.xhr}setLastSessionXHR(xhr,this);xhr.send()}else{xhr._anonymousLogoutOK=true}}catch(e){this._reinitializeAfterLogout(this,false);throw e}if(!isAsync){try{this._processLogoutResult(xhr)}catch(e){throw e}}if(isAsync&&this.authenticationModel===progress.data.Session.AUTH_TYPE_ANON){try{this._processLogoutResult(xhr)}catch(e){errorObject=e}this._logoutComplete(this,null,errorObject,xhr)}};this.invalidate=function(){isInvalidated=true;cleanServicesManager()};this._logoutComplete=function(pdsession,result,errorObject,xhr){pdsession.trigger("afterLogout",pdsession,errorObject,xhr)};this._processLogoutResult=function(xhr){var logoutSucceeded;var pdsession=xhr.pdsession;var basicStatusOK=false;if(xhr._anonymousLogoutOK){logoutSucceeded=true}else if(xhr.status!==200){if(pdsession.authenticationModel===progress.data.Session.AUTH_TYPE_BASIC||pdsession.authenticationModel===progress.data.Session.AUTH_TYPE_BEARER){if(xhr.status===404){logoutSucceeded=true}else{logoutSucceeded=false;throw new Error("Error logging out, HTTP status = "+xhr.status)}}else{logoutSucceeded=false;throw new Error("Error logging out, HTTP status = "+xhr.status)}}else{logoutSucceeded=true}updateContextPropsFromResponse(pdsession,xhr);pdsession._reinitializeAfterLogout(pdsession,logoutSucceeded)};this._reinitializeAfterLogout=function(pdsession,success){setLoginResult(null,pdsession);setLoginHttpStatus(null,pdsession);setClientContextID(null,pdsession);setUserName(null,pdsession);setAuthProvider(null);_password=null;if(success){setRestApplicationIsOnline(false);setOepingAvailable(false);setPartialPingURI(defaultPartialPingURI);setLastSessionXHR(null,pdsession);clearTimeout(_timeoutID)}};this.addCatalog=function(arg1,arg2,arg3,arg4){var catalogURI,catalogUserName,catalogPassword,isAsync=false,xhr,deferred,iOSBasicAuthTimeout,catalogIndex,authProvider,that=this;function addCatalogAfterOpen(){progress.data.Session._setNoCacheHeaders(xhr);setRequestHeaderFromContextProps(that,xhr);if(isAsync){xhr.onreadystatechange=that._onReadyStateChangeGeneric;xhr.onResponseFn=that._processAddCatalogResult;xhr.onResponseProcessedFn=that._addCatalogComplete;if(that.authenticationModel===progress.data.Session.AUTH_TYPE_BASIC&&isUserAgentiOS&&iOSBasicAuthTimeout){xhr._requestTimeout=setTimeout(function(){clearTimeout(xhr._requestTimeout);xhr._iosTimeOutExpired=true;xhr.abort()},iOSBasicAuthTimeout)}xhr._jsdosession=jsdosession;xhr._deferred=deferred;xhr._catalogIndex=catalogIndex}try{if(typeof that.onOpenRequest==="function"){setLastSessionXHR(xhr,that);var params={xhr:xhr,verb:"GET",uri:catalogURI,async:false,formPreTest:false,session:that};that.onOpenRequest(params);xhr=params.xhr}setLastSessionXHR(xhr,that);xhr.send(null)}catch(e){throw new Error("Error retrieving catalog '"+catalogURI+"'.\n"+e.message)}if(isAsync){return progress.data.Session.ASYNC_PENDING}else{return that._processAddCatalogResult(xhr)}}if(this._isInvalidated){throw new Error(progress.data._getMsgText("jsdoMSG510","JSDOSession"))}customCredentials=true;if(arguments.length>0){if(typeof arg1==="object"){if(!arguments[0].offlineAddCatalog){if(this.loginResult!==progress.data.Session.LOGIN_SUCCESS&&!this._authProvider&&this.authenticationModel){throw new Error("Attempted to call addCatalog when there is no active session.")}}catalogURI=arg1.catalogURI;if(!catalogURI||typeof catalogURI!=="string"){throw new Error(progress.data._getMsgText("jsdoMSG033","Session","addCatalog","The catalogURI argument was missing or invalid."))}catalogUserName=arg1.userName;if(catalogUserName&&typeof catalogUserName!=="string"){throw new Error(progress.data._getMsgText("jsdoMSG033","Session","addCatalog","The catalogUserName argument was invalid."))}catalogPassword=arg1.password;if(catalogPassword&&typeof catalogPassword!=="string"){throw new Error(progress.data._getMsgText("jsdoMSG033","Session","addCatalog","The catalogPassword argument was invalid."))}isAsync=arg1.async;if(isAsync&&typeof isAsync!=="boolean"){throw new Error(progress.data._getMsgText("jsdoMSG033","Session","addCatalog","The async argument was invalid."))}iOSBasicAuthTimeout=arg1.iOSBasicAuthTimeout;if(typeof iOSBasicAuthTimeout==="undefined"){iOSBasicAuthTimeout=defaultiOSBasicAuthTimeout}else if(iOSBasicAuthTimeout&&typeof iOSBasicAuthTimeout!=="number"){throw new Error(progress.data._getMsgText("jsdoMSG033","Session","addCatalog","The iOSBasicAuthTimeout argument was invalid."))}authProvider=arg1.authProvider;deferred=arg1.deferred;catalogIndex=arg1.catalogIndex}else{catalogURI=arg1;if(typeof catalogURI!=="string"){throw new Error("First argument to Session.addCatalog must be the URL of the catalog.")}catalogUserName=arg2;if(catalogUserName&&typeof catalogUserName!=="string"){throw new Error("Second argument to Session.addCatalog must be a user name string.")}catalogPassword=arg3;if(catalogPassword&&typeof catalogPassword!=="string"){throw new Error("Third argument to Session.addCatalog must be a password string.")}}}else{throw new Error("Session.addCatalog is missing its first argument, the URL of the catalog.")}if(!authProvider){authProvider=this._authProvider;customCredentials=false}if(!catalogUserName){catalogUserName=this.userName}if(!catalogPassword){catalogPassword=_password}xhr=new XMLHttpRequest;xhr.pdsession=this;xhr._catalogURI=catalogURI;if(progress.data.ServicesManager.getSession(catalogURI)!==undefined){if(isAsync){xhr._jsdosession=jsdosession;xhr._deferred=deferred;xhr._catalogIndex=catalogIndex;setTimeout(this._addCatalogComplete,10,this,progress.data.Session.CATALOG_ALREADY_LOADED,null,xhr);return progress.data.Session.ASYNC_PENDING}return progress.data.Session.CATALOG_ALREADY_LOADED}if(authProvider){authProvider._openRequestAndAuthorize(xhr,"GET",catalogURI,isAsync,addCatalogAfterOpen);return progress.data.Session.ASYNC_PENDING}else{this._setXHRCredentials(xhr,"GET",catalogURI,catalogUserName,catalogPassword,isAsync);return addCatalogAfterOpen()}};this._processAddCatalogResult=function(xhr){var _catalogHttpStatus=xhr.status;var theSession=xhr.pdsession;var servicedata;var catalogURI=xhr._catalogURI,serviceURL,theJSDOSession=jsdosession;if(!customCredentials){toggleOnlineState(xhr)}if((_catalogHttpStatus===200||_catalogHttpStatus===0)&&xhr.responseText){servicedata=theSession._parseCatalog(xhr);try{progress.data.ServicesManager.addCatalog(servicedata,theSession)}catch(e){if(progress.data.ServicesManager.getSession(catalogURI)!==undefined){return progress.data.Session.CATALOG_ALREADY_LOADED}throw new Error("Error processing catalog '"+catalogURI+"'. \n"+e.message)}servicedata.forEach(function(service){serviceURL=theSession._prependAppURL(service.address);pushService(new progress.data.MobileServiceObject({name:service.name,uri:serviceURL}),theSession);if(service.settings&&service.settings.useXClientProps&&!theSession.xClientProps){console.warn("Catalog warning: Service settings property 'useXClientProps' "+"is true but 'xClientProps' property has not been set.")}});pushCatalogURIs(catalogURI,theSession);progress.data.ServicesManager.addSession(catalogURI,theSession);if(theJSDOSession){progress.data.ServicesManager.addJSDOSession(catalogURI,theJSDOSession)}}else if(_catalogHttpStatus===401){return progress.data.AuthenticationProvider._getAuthFailureReason(xhr)}else if(xhr._iosTimeOutExpired){throw new Error(progress.data._getMsgText("jsdoMSG047","addCatalog"))}else{throw new Error("Error retrieving catalog '"+catalogURI+"'. Http status: "+_catalogHttpStatus+".")}return progress.data.Session.SUCCESS};this._addCatalogComplete=function(pdsession,result,errObj,xhr){pdsession.trigger("afterAddCatalog",pdsession,result,errObj,xhr)};this.ping=function(args){var pingResult=false,pingArgs={pingURI:null,async:true,onCompleteFn:null,fireEventIfOfflineChange:true,onReadyStateFn:this._onReadyStateChangePing,offlineReason:null};if(this._isInvalidated){throw new Error(progress.data._getMsgText("jsdoMSG510","Session"))}if(!this._authProvider&&this.loginResult!==progress.data.Session.LOGIN_SUCCESS){throw new Error("Attempted to call ping when not logged in.")}if(args){if(args.async!==undefined){pingArgs.async=args.async}if(args.doNotFireEvent!==undefined){pingArgs.fireEventIfOfflineChange=!args.doNotFireEvent}if(args.onCompleteFn&&typeof args.onCompleteFn==="function"){pingArgs.onCompleteFn=args.onCompleteFn}pingArgs.deferred=args.deferred;pingArgs.jsdosession=args.jsdosession}pingArgs.pingURI=that._makePingURI();that._sendPing(pingArgs);if(!pingArgs.async){if(pingArgs.xhr){pingResult=that._processPingResult(pingArgs);if(args.offlineReason!==undefined){args.offlineReason=pingArgs.offlineReason}}else{pingResult=false}if(args.xhr!==undefined){args.xhr=pingArgs.xhr}}return pingResult};this._isOnlineStateChange=function(isOnline){var stateChanged=false;if(isOnline&&!this.connected){stateChanged=true}else if(!isOnline&&this.connected){stateChanged=true}return stateChanged};this._checkServiceResponse=function(xhr,success,request){var offlineReason=null,wasOnline=this.connected;updateContextPropsFromResponse(this,xhr);if(!this._events){return}var offlineObservers=this._events.offline||[];var onlineObservers=this._events.online||[];if(offlineObservers.length===0&&onlineObservers.length===0){return}if(success){setRestApplicationIsOnline(true);setDeviceIsOnline(true)}else{if(deviceIsOnline){var localPingArgs={doNotFireEvent:true,offlineReason:null,async:false};if(!that.ping(localPingArgs)){offlineReason=localPingArgs.offlineReason;setRestApplicationIsOnline(false)}else{setRestApplicationIsOnline(true)}}}if(wasOnline&&!this.connected){this.trigger("offline",this,offlineReason,request)}else if(!wasOnline&&this.connected){this.trigger("online",this,request)}};this._processPingResult=function(args){var xhr=args.xhr,pingResponseJSON,appServerStatus=null,wasOnline=this.connected,connectedBeforeCallback,assumeOepingFormat;if(args.hasOwnProperty("usingOepingFormat")){assumeOepingFormat=args.usingOepingFormat}else{assumeOepingFormat=oepingAvailable}if(xhr.status>=200&&xhr.status<300){updateContextPropsFromResponse(this,xhr);if(assumeOepingFormat){try{pingResponseJSON=JSON.parse(xhr.responseText);appServerStatus=pingResponseJSON.AppServerStatus}catch(e){console.error("Unable to parse ping response.")}}toggleOnlineState(xhr)}else{if(deviceIsOnline){if(xhr.status===0){args.offlineReason=progress.data.Session.SERVER_OFFLINE;setRestApplicationIsOnline(false)}else if(xhr.status===404||xhr.status===410){args.offlineReason=progress.data.Session.WEB_APPLICATION_OFFLINE;setRestApplicationIsOnline(false)}else{setRestApplicationIsOnline(true)}}else{args.offlineReason=progress.data.Session.DEVICE_OFFLINE}}if(appServerStatus){if(appServerStatus.PingStatus==="false"){args.offlineReason=progress.data.Session.APPSERVER_OFFLINE;setRestApplicationIsOnline(false)}else{setRestApplicationIsOnline(true)}}connectedBeforeCallback=this.connected;if(typeof xhr.onCompleteFn==="function"){xhr.onCompleteFn({pingResult:this.connected,xhr:xhr,offlineReason:args.offlineReason})}if(args.fireEventIfOfflineChange){if(wasOnline&&!connectedBeforeCallback){that.trigger("offline",that,args.offlineReason,null)}else if(!wasOnline&&connectedBeforeCallback){that.trigger("online",that,null)}}return this.connected};this._onReadyStateChangePing=function(){var xhr=this;var args;try{if(xhr.readyState===4){args={xhr:xhr,fireEventIfOfflineChange:true,offlineReason:null};that._processPingResult(args);if(_pingInterval>0){_timeoutID=setTimeout(that._autoping,_pingInterval)}}}catch(e){}};this._pingtestOnReadyStateChange=function(){var xhr=this;try{if(xhr.readyState===4){var foundOeping=false;if(xhr.status>=200&&xhr.status<300){foundOeping=true}else{setPartialPingURI(that.loginTarget);console.warn("Default ping target not available, will use loginTarget instead.")}setOepingAvailable(foundOeping);if(_pingInterval>0){_timeoutID=setTimeout(that._autoping,_pingInterval)}}}catch(e){}};var resolvePingURI=()=>{var xhr=new XMLHttpRequest,deferred=new progress.util.Deferred;xhr.onreadystatechange=(()=>{if(xhr.readyState===4){if(xhr.status===404){setPartialPingURI(classicPartialPingURI);deferred.reject(false)}else{deferred.resolve(true)}hasResolvedPingURI=true}});if(hasResolvedPingURI||this.loginResult!==progress.data.Session.LOGIN_SUCCESS&&!this.authProvider){deferred.resolve(true)}else{this._openRequest(xhr,"GET",partialPingURI,true,()=>xhr.send())}return deferred.promise()};this._sendPing=function(args){var xhr=new XMLHttpRequest,that=this;args.xhr=xhr;function sendPingAfterOpen(){if(args.async){xhr.onreadystatechange=args.onReadyStateFn;xhr.onCompleteFn=args.onCompleteFn;xhr._jsdosession=jsdosession;xhr._deferred=args.deferred}progress.data.Session._setNoCacheHeaders(xhr);setRequestHeaderFromContextProps(that,xhr);if(that.authenticationModel===progress.data.Session.AUTH_TYPE_FORM){_addWithCredentialsAndAccept(xhr,"application/json,text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")}xhr.send(null)}resolvePingURI().then(()=>{},()=>{args.pingURI=this._makePingURI()}).then(()=>{try{if(this._authProvider){this._authProvider._openRequestAndAuthorize(xhr,"GET",args.pingURI,args.async,sendPingAfterOpen)}else{this._setXHRCredentials(xhr,"GET",args.pingURI,this.userName,_password,args.async);if(xhr.readyState===1){sendPingAfterOpen()}}}catch(e){args.error=e}})};this._makePingURI=function(){var pingURI=this.serviceURI+partialPingURI;if(progress.data.Session._useTimeStamp){pingURI=progress.data.Session._addTimeStampToURL(pingURI)}return pingURI};this._autoping=function(){that.ping({async:true})};this._setXHRCredentials=function(xhr,verb,uri,userName,password,async){if(userName&&this.authenticationModel===progress.data.Session.AUTH_TYPE_BASIC){if(canPassCredentialsToOpen()){xhr.open(verb,uri,async,userName,password)}else{xhr.open(verb,uri,async)}var auth=_make_basic_auth(userName,password);xhr.setRequestHeader("Authorization",auth)}else{xhr.open(verb,uri,async)}};this._addCCIDtoURL=function(url){var urlPart1,urlPart2,jsessionidStr,index;if(this.clientContextId&&this.clientContextId!=="0"){if(url.substring(0,this.serviceURI.length)===this.serviceURI){jsessionidStr=";"+"JSESSIONID="+this.clientContextId;index=url.indexOf("?");if(index===-1){url+=jsessionidStr}else{urlPart1=url.substring(0,index);urlPart2=url.substring(index);url=urlPart1+jsessionidStr+urlPart2}}}return url};this._saveClientContextId=function(xhr){setClientContextIDfromXHR(xhr,this)};this._parseCatalog=function(xhr){var jsonObject;var catalogdata;try{jsonObject=JSON.parse(xhr.responseText);catalogdata=jsonObject.services}catch(e){console.error("Unable to parse response. Make sure catalog has correct format.");catalogdata=null}return catalogdata};this._prependAppURL=function(oldURL){if(!oldURL){return this.serviceURI}var newURL=oldURL;var pat=/^https?:\/\//i;if(!pat.test(newURL)){if(newURL.indexOf("/")!==0){newURL="/"+newURL}newURL=this.serviceURI+newURL}return newURL};function _addWithCredentialsAndAccept(xhr,acceptString){try{xhr.withCredentials=true;xhr.setRequestHeader("Accept",acceptString)}catch(e){}}function _make_basic_auth(user,pw){var tok=user+":"+pw;var hash=btoa(tok);return"Basic "+hash}var loginFormIDString="j_spring_security_check";function _gotLoginForm(xhr){return _findStringInResponseHTML(xhr,loginFormIDString)}var loginFailureIdentificationString="login failed";function _gotLoginFailure(xhr){return _findStringInResponseHTML(xhr,loginFailureIdentificationString)}function _findStringInResponseHTML(xhr,searchString){if(!xhr.responseText){return false}var contentType=xhr.getResponseHeader("Content-Type");if(contentType&&contentType.indexOf("text/html")>=0&&xhr.responseText.indexOf(searchString)>=0){return true}return false}function handleJSONLoginResponse(params){var jsonObject;params.statusFromjson=null;try{jsonObject=JSON.parse(params.xhr.responseText);if(jsonObject.status_code!==undefined&&jsonObject.status_txt!==undefined){params.statusFromjson=jsonObject.status_code}}catch(e){setLoginResult(progress.data.Session.LOGIN_GENERAL_FAILURE,params.session);setLoginHttpStatus(params.xhr.status,params.session);throw new Error("Unable to parse login response from server.")}}function setRequestHeaderFromContextProps(session,xhr){if(session.xClientProps){xhr.setRequestHeader("X-CLIENT-PROPS",session.xClientProps)}else if(session._contextProperties.contextHeader!==undefined){xhr.setRequestHeader("X-CLIENT-PROPS",session._contextProperties.contextHeader)}}function toggleOnlineState(xhr){var pdsession=that;setLoginHttpStatus(xhr.status,pdsession);if(pdsession.loginHttpStatus>=200&&pdsession.loginHttpStatus<400){setLoginResult(progress.data.Session.LOGIN_SUCCESS,pdsession);setRestApplicationIsOnline(true);pdsession._saveClientContextId(xhr);storeAllSessionInfo()}else{if(pdsession.loginHttpStatus===0||pdsession.loginHttpStatus===400||pdsession.loginHttpStatus===410){setRestApplicationIsOnline(false);setLoginResult(progress.data.AuthenticationProvider._getAuthFailureReason(xhr),pdsession)}else{setRestApplicationIsOnline(true);setLoginResult(progress.data.Session.LOGIN_GENERAL_FAILURE,pdsession)}}setLastSessionXHR(xhr,pdsession);updateContextPropsFromResponse(pdsession,xhr);return pdsession.loginResult}function updateContextPropsFromResponse(session,xhr){var contextString,context;if(xhr){contextString=getResponseHeaderNoError(xhr,"X-CLIENT-PROPS");if(contextString){try{context=JSON.parse(contextString)}catch(e){}if(typeof context==="object"){session._contextProperties.setContext(context)}else{throw new Error(progress.data._getMsgText("jsdoMSG123","Session","X-CLIENT-PROPS"))}}else if(contextString===""){session._contextProperties.setContext({})}}}function cleanServicesManager(){progress.data.ServicesManager.cleanSession(that)}if(typeof options==="object"){jsdosession=options.jsdosession;newURI=options.serviceURI;setAuthProvider(options.authProvider);if(options.authProvider&&options.authProvider.hasClientCredentials()){_loginResult=progress.data.Session.LOGIN_SUCCESS}if(newURI&&newURI[newURI.length-1]==="/"){newURI=newURI.substring(0,newURI.length-1)}_storageKey=options._storageKey;if(_storageKey){if(retrieveSessionInfo(_storageKey)){storedAuthModel=retrieveSessionInfo("authenticationModel");storedURI=retrieveSessionInfo("serviceURI");if(storedAuthModel!==options.authenticationModel||storedURI!==newURI){clearAllSessionInfo()}else{setSessionInfoFromStorage(_storageKey);stateWasReadFromStorage=true}}if(options.authenticationModel===progress.data.Session.AUTH_TYPE_BASIC){_storageKey=undefined}}if(!stateWasReadFromStorage){if(newURI){setServiceURI(newURI,this)}if(options.authenticationModel){this.authenticationModel=options.authenticationModel}}}};progress.data.Session._useTimeStamp=true;var SEQ_MAX_VALUE=999999999999999;var _tsseq=SEQ_MAX_VALUE;var _tsprefix1=0;var _tsprefix2=0;progress.data.Session._getNextTimeStamp=function(){var seq;_tsseq+=1;seq=_tsseq;if(seq>=SEQ_MAX_VALUE){_tsseq=1;seq=1;var t=Math.floor((Date.now?Date.now():(new Date).getTime())/1e4);if(_tsprefix1===t){_tsprefix2+=1;if(_tsprefix2>=SEQ_MAX_VALUE){_tsprefix2=1}}else{_tsprefix1=t;Math.random();_tsprefix2=Math.round(Math.random()*1e10)}}return _tsprefix1+"-"+_tsprefix2+"-"+seq};progress.data.Session._addTimeStampToURL=function(url){var timeStamp="_ts="+progress.data.Session._getNextTimeStamp();url+=(url.indexOf("?")===-1?"?":"&")+timeStamp;return url};progress.data.Session._setNoCacheHeaders=function(xhr){xhr.setRequestHeader("Cache-Control","no-cache");xhr.setRequestHeader("Pragma","no-cache")};if(typeof Object.defineProperty==="function"){Object.defineProperty(progress.data.Session,"LOGIN_AUTHENTICATION_REQUIRED",{value:0,enumerable:true});Object.defineProperty(progress.data.Session,"LOGIN_SUCCESS",{value:1,enumerable:true});Object.defineProperty(progress.data.Session,"LOGIN_AUTHENTICATION_FAILURE",{value:2,enumerable:true});Object.defineProperty(progress.data.Session,"LOGIN_GENERAL_FAILURE",{value:3,enumerable:true});Object.defineProperty(progress.data.Session,"CATALOG_ALREADY_LOADED",{value:4,enumerable:true});Object.defineProperty(progress.data.Session,"ASYNC_PENDING",{value:5,enumerable:true});Object.defineProperty(progress.data.Session,"EXPIRED_TOKEN",{value:6,enumerable:true});Object.defineProperty(progress.data.Session,"SUCCESS",{value:1,enumerable:true});Object.defineProperty(progress.data.Session,"AUTHENTICATION_FAILURE",{value:2,enumerable:true});Object.defineProperty(progress.data.Session,"GENERAL_FAILURE",{value:3,enumerable:true});Object.defineProperty(progress.data.Session,"AUTH_TYPE_ANON",{value:"anonymous",enumerable:true});Object.defineProperty(progress.data.Session,"AUTH_TYPE_BASIC",{value:"basic",enumerable:true});Object.defineProperty(progress.data.Session,"AUTH_TYPE_FORM",{value:"form",enumerable:true});Object.defineProperty(progress.data.Session,"AUTH_TYPE_SSO",{value:"sso",enumerable:true});Object.defineProperty(progress.data.Session,"AUTH_TYPE_FORM_SSO",{value:"form_sso",enumerable:true});Object.defineProperty(progress.data.Session,"AUTH_TYPE_BEARER",{value:"bearer",enumerable:true});Object.defineProperty(progress.data.Session,"DEVICE_OFFLINE",{value:"Device is offline",enumerable:true});Object.defineProperty(progress.data.Session,"SERVER_OFFLINE",{value:"Cannot contact server",enumerable:true});Object.defineProperty(progress.data.Session,"WEB_APPLICATION_OFFLINE",{value:"Mobile Web Application is not available",enumerable:true});Object.defineProperty(progress.data.Session,"SERVICE_OFFLINE",{value:"REST web Service is not available",enumerable:true});Object.defineProperty(progress.data.Session,"APPSERVER_OFFLINE",{value:"AppServer is not available",enumerable:true})}else{progress.data.Session.LOGIN_SUCCESS=1;progress.data.Session.LOGIN_AUTHENTICATION_FAILURE=2;progress.data.Session.LOGIN_GENERAL_FAILURE=3;progress.data.Session.CATALOG_ALREADY_LOADED=4;progress.data.Session.SUCCESS=1;progress.data.Session.AUTHENTICATION_FAILURE=2;progress.data.Session.GENERAL_FAILURE=3;progress.data.Session.AUTH_TYPE_ANON="anonymous";progress.data.Session.AUTH_TYPE_BASIC="basic";progress.data.Session.AUTH_TYPE_FORM="form";progress.data.Session.AUTH_TYPE_SSO="sso";progress.data.Session.AUTH_TYPE_BEARER="bearer"}progress.data.Session.prototype=new progress.util.Observable;progress.data.Session.prototype.constructor=progress.data.Session;function validateSessionSubscribe(args,evt,listenerData){listenerData.operation=undefined;var found=false;this._eventNames.forEach(function(eventName){if(evt===eventName.toLowerCase()){found=true}});if(!found){throw new Error(progress.data._getMsgText("jsdoMSG042",evt))}if(args.length<2){throw new Error(progress.data._getMsgText("jsdoMSG038",2))}if(typeof args[0]!=="string"){throw new Error(progress.data._getMsgText("jsdoMSG039"))}if(typeof args[1]!=="function"){throw new Error(progress.data._getMsgText("jsdoMSG040"))}listenerData.fn=args[1];if(args.length>2){if(typeof args[2]!=="object"){throw new Error(progress.data._getMsgText("jsdoMSG041",evt))}else{listenerData.scope=args[2]}}}progress.data.Session.prototype._eventNames=["offline","online","afterLogin","afterAddCatalog","afterLogout","afterDisconnect"];progress.data.Session.prototype.validateSubscribe=validateSessionSubscribe;progress.data.Session.prototype.toString=function(radix){return"progress.data.Session"};progress.data.JSDOSession=function JSDOSession(options){var _pdsession,_serviceURI,that=this,_name;Object.defineProperty(this,"authenticationModel",{get:function(){return _pdsession?_pdsession.authenticationModel:undefined},enumerable:true});Object.defineProperty(this,"authProvider",{get:function(){return _pdsession?_pdsession._authProvider:null},enumerable:true});Object.defineProperty(this,"catalogURIs",{get:function(){return _pdsession?_pdsession.catalogURIs:undefined},enumerable:true});Object.defineProperty(this,"clientContextId",{get:function(){return _pdsession?_pdsession.clientContextId:undefined},enumerable:true});Object.defineProperty(this,"connected",{get:function(){return _pdsession?_pdsession.connected:undefined},enumerable:true});Object.defineProperty(this,"JSDOs",{get:function(){return _pdsession?_pdsession.JSDOs:undefined},enumerable:true});Object.defineProperty(this,"loginResult",{get:function(){return _pdsession?_pdsession.loginResult:undefined},enumerable:true});Object.defineProperty(this,"loginHttpStatus",{get:function(){return _pdsession?_pdsession.loginHttpStatus:undefined},enumerable:true});Object.defineProperty(this,"onOpenRequest",{get:function(){return _pdsession?_pdsession.onOpenRequest:undefined},set:function(newval){if(_pdsession){_pdsession.onOpenRequest=newval}},enumerable:true});Object.defineProperty(this,"pingInterval",{get:function(){return _pdsession?_pdsession.pingInterval:undefined},set:function(newval){if(_pdsession){_pdsession.pingInterval=newval}},enumerable:true});Object.defineProperty(this,"services",{get:function(){return _pdsession?_pdsession.services:undefined},enumerable:true});Object.defineProperty(this,"serviceURI",{get:function(){if(_pdsession&&_pdsession.serviceURI){return _pdsession.serviceURI}else{return _serviceURI}},enumerable:true});Object.defineProperty(this,"userName",{get:function(){return _pdsession?_pdsession.userName:undefined},enumerable:true});Object.defineProperty(this,"name",{get:function(){return _name},enumerable:true});Object.defineProperty(this,"_isInvalidated",{get:function(){return _pdsession._isInvalidated},enumerable:false});function settlePromise(promise,fulfill,result,info){if(fulfill){promise.resolve(that,result,info)}else{promise.reject(that,result,info)}}function genericSessionEventHandler(pdsession,result,errorObject,xhr,deferred){var myDeferred;if(xhr){myDeferred=xhr._deferred}else{myDeferred=deferred}settlePromise(myDeferred,result===progress.data.Session.SUCCESS?true:false,result,{errorObject:errorObject,xhr:xhr})}function onAfterAddCatalog(pdsession,result,errorObject,xhr){var deferred,fulfill=false,settleResult,info;if(result===progress.data.Session.EXPIRED_TOKEN){settleResult=progress.data.Session.EXPIRED_TOKEN}else if(result===progress.data.Session.LOGIN_AUTHENTICATION_FAILURE){settleResult=progress.data.Session.LOGIN_AUTHENTICATION_FAILURE}else{settleResult=progress.data.Session.GENERAL_FAILURE}if(xhr&&xhr._deferred){deferred=xhr._deferred;if(result!==progress.data.Session.SUCCESS&&result!==progress.data.Session.CATALOG_ALREADY_LOADED){result=result||progress.data.Session.GENERAL_FAILURE;deferred._overallCatalogResult=progress.data.Session.GENERAL_FAILURE}deferred._results[xhr._catalogIndex]={catalogURI:xhr._catalogURI,result:result,errorObject:errorObject,xhr:xhr};deferred._numCatalogsProcessed+=1;if(deferred._numCatalogsProcessed===deferred._numCatalogs){deferred._processedPromise=true;if(!deferred._overallCatalogResult){fulfill=true;settleResult=progress.data.Session.SUCCESS}if(settleResult===progress.data.Session.SUCCESS){if(xhr._deferred._results.length===1){info=xhr._deferred._results[0]}else{info={xhr:xhr,result:settleResult,details:xhr._deferred._results}}}else{if(xhr._deferred._results.length===1){info=xhr._deferred._results[0]}else{info={xhr:xhr,result:settleResult,errorObject:new Error(progress.data._getMsgText("jsdoMSG512")),details:xhr._deferred._results}}}settlePromise(xhr._deferred,fulfill,settleResult,info)}}}function onAfterLogout(pdsession,errorObject,xhr){var result=progress.data.Session.GENERAL_FAILURE,fulfill=false;if(xhr&&xhr._deferred){if(!errorObject&&!pdsession.loginResult){result=progress.data.Session.SUCCESS;fulfill=true}settlePromise(xhr._deferred,fulfill,result,{errorObject:errorObject,xhr:xhr})}}function onPingComplete(args){var xhr=args.xhr;if(xhr&&xhr._deferred){settlePromise(xhr._deferred,args.pingResult,args.pingResult,{offlineReason:args.offlineReason,xhr:xhr})}}this.login=function(username,password,options){var deferred=new progress.util.Deferred,iOSBasicAuthTimeout;function callIsAuthorized(){that.isAuthorized().then(function(object,result,info){object=progress.util.Deferred.getParamObject(object,result,info);deferred.resolve(that,object.result,object.info)},function(object,result,info){object=progress.util.Deferred.getParamObject(object,result,info);deferred.reject(that,object.result,object.info)})}try{if(this._isInvalidated){throw new Error(progress.data._getMsgText("jsdoMSG510","JSDOSession"))}if(this.authenticationModel===progress.data.Session.AUTH_TYPE_SSO){throw new Error(progress.data._getMsgText("jsdoMSG057","JSDOSession","login()"))}if(typeof options==="object"){iOSBasicAuthTimeout=options.iOSBasicAuthTimeout}if(!_pdsession._authProvider){_pdsession._authProvider=new progress.data.AuthenticationProvider({uri:this.serviceURI,authenticationModel:this.authenticationModel});_pdsession._authProvider.logout().then(function(){return _pdsession._authProvider.login(username,password)}).then(function(){callIsAuthorized()},function(object,result,info){object=progress.util.Deferred.getParamObject(object,result,info);deferred.reject(that,object.result,object.info)})}else{throw new Error(progress.data._getMsgText("jsdoMSG062","JSDOSession","login()"))}}catch(error){if(progress.util.Deferred.useJQueryPromises){throw error}else{deferred.reject(this,progress.data.Session.GENERAL_FAILURE,{errorObject:error})}}return deferred.promise()};this.disconnect=function(){var deferred=new progress.util.Deferred,errorObject;try{_pdsession.subscribe("afterDisconnect",genericSessionEventHandler,this);_pdsession._disconnect(deferred)}catch(e){errorObject=new Error(progress.data._getMsgText("jsdoMSG049","JSDOSession","disconnect",e.message))}if(errorObject){if(progress.util.Deferred.useJQueryPromises){throw errorObject}else{deferred.reject(this,progress.data.Session.GENERAL_FAILURE,{errorObject:errorObject})}}else{return deferred.promise()}};this.addCatalog=function(catalogURI,unameOrOpts,password,opts){var deferred=new progress.util.Deferred,catalogURIs,numCatalogs,catalogIndex,addResult,errorObject,iOSBasicAuthTimeout,username,options,authProvider;try{if(this._isInvalidated){throw new Error(progress.data._getMsgText("jsdoMSG510","JSDOSession"))}if(typeof catalogURI==="string"){catalogURIs=[catalogURI]}else if(catalogURI instanceof Array){catalogURIs=catalogURI}else{throw new Error(progress.data._getMsgText("jsdoMSG033","JSDOSession","addCatalog","The first argument must be a string or an array of strings specifying the URI of the catalog."))}if(unameOrOpts){if(typeof unameOrOpts==="string"){if(this.authenticationModel===progress.data.Session.AUTH_TYPE_SSO){throw new Error(progress.data._getMsgText("jsdoMSG058","Session"))}username=unameOrOpts;if(opts){options=opts;options.authProvider=undefined}}else if(typeof unameOrOpts==="object"){options=unameOrOpts}else{throw new Error(progress.data._getMsgText("jsdoMSG121","JSDOSession","2","object","addCatalog"))}}if(typeof options==="object"){iOSBasicAuthTimeout=options.iOSBasicAuthTimeout;if(options.authProvider){authProvider=options.authProvider}else if(this.authProvider){authProvider=this.authProvider}}if(!authProvider&&!this.authProvider&&!username){throw new Error(progress.data._getMsgText("jsdoMSG511"))}_pdsession.subscribe("afterAddCatalog",onAfterAddCatalog,this);numCatalogs=catalogURIs.length;deferred._numCatalogs=numCatalogs;deferred._numCatalogsProcessed=0;deferred._results=[];deferred._results.length=numCatalogs;for(catalogIndex=0;catalogIndex=200&&xhr.status<300){deferred.resolve(that,progress.data.Session.SUCCESS,info)}else{if(xhr.status===401){cbresult=progress.data.AuthenticationProvider._getAuthFailureReason(xhr)}else{cbresult=progress.data.Session.GENERAL_FAILURE}deferred.reject(that,cbresult,info)}}}catch(e){}};try{xhr.send()}catch(e){throw new Error("JSDOSession: Unable to validate authorization. "+e.message)}})}else{result=progress.data.Session.LOGIN_AUTHENTICATION_REQUIRED;deferred.reject(that,result,{xhr:xhr})}}catch(error){if(progress.util.Deferred.useJQueryPromises){throw error}else{deferred.reject(that,progress.data.Session.GENERAL_FAILURE,{errorObject:error})}}return deferred.promise()};this.setContext=function(context){_pdsession._contextProperties.setContext(context)};this.setContextProperty=function(propertyName,propertyValue){_pdsession._contextProperties.setContextProperty(propertyName,propertyValue)};this.getContext=function(){return _pdsession._contextProperties.getContext()};this.getContextProperty=function(propertyName){return _pdsession._contextProperties.getContextProperty(propertyName)};this._onlineHandler=function(session,request){that.trigger("online",that,request)};this._offlineHandler=function(session,offlineReason,request){that.trigger("offline",that,offlineReason,request)};if(arguments.length>0&&typeof arguments[0]==="object"){if(options.serviceURI&&typeof options.serviceURI==="string"){_serviceURI=options.serviceURI}else{throw new Error(progress.data._getMsgText("jsdoMSG033","JSDOSession","the constructor","The options parameter must include a 'serviceURI' property that is a string."))}if(options.authenticationModel){if(typeof options.authenticationModel!=="string"){throw new Error(progress.data._getMsgText("jsdoMSG033","JSDOSession","the constructor","The authenticationModel property of the options parameter must be a string."))}options.authenticationModel=options.authenticationModel.toLowerCase()}else{options.authenticationModel=progress.data.Session.AUTH_TYPE_ANON}if(options.authProvider){if(typeof options.authProvider!=="object"){throw new Error(progress.data._getMsgText("jsdoMSG502","JSDOSession","options","constructor","authProvider"))}if(options.authProvider.authenticationModel!==progress.data.Session.AUTH_TYPE_FORM_SSO&&options.authProvider.authenticationModel!==options.authenticationModel||options.authProvider.authenticationModel===progress.data.Session.AUTH_TYPE_FORM_SSO&&options.authenticationModel!==progress.data.Session.AUTH_TYPE_SSO){throw new Error(progress.data._getMsgText("jsdoMSG059","JSDOSession",options.authProvider.authenticationModel,options.authenticationModel))}if(typeof options.authProvider.hasClientCredentials==="function"){if(!options.authProvider.hasClientCredentials()){throw new Error(progress.data._getMsgText("jsdoMSG125","JSDOSession"))}}else{throw new Error(progress.data._getMsgText("jsdoMSG505","JSDOSession","AuthenticationProvider","hasClientCredentials"))}}else if(options.authenticationModel===progress.data.Session.AUTH_TYPE_SSO){throw new Error(progress.data._getMsgText("jsdoMSG508"))}}else{throw new Error(progress.data._getMsgText("jsdoMSG033","JSDOSession","the constructor","The options argument was missing or invalid."))}_name=options.name;_pdsession=new progress.data.Session({_storageKey:_name,_silent:true,authenticationModel:options.authenticationModel,serviceURI:options.serviceURI,jsdosession:this,authProvider:options.authProvider});try{if(options.context){this.setContext(options.context)}_pdsession.subscribe("online",this._onlineHandler,this);_pdsession.subscribe("offline",this._offlineHandler,this)}catch(err){_pdsession=undefined;throw err}};progress.data.JSDOSession.prototype=new progress.util.Observable;progress.data.JSDOSession.prototype.constructor=progress.data.JSDOSession;function validateJSDOSessionSubscribe(args,evt,listenerData){listenerData.operation=undefined;var found=false;this._eventNames.forEach(function(eventName){if(evt===eventName.toLowerCase()){found=true}});if(!found){throw new Error(progress.data._getMsgText("jsdoMSG042",evt))}if(args.length<2){throw new Error(progress.data._getMsgText("jsdoMSG038",2))}if(typeof args[0]!=="string"){throw new Error(progress.data._getMsgText("jsdoMSG039"))}if(typeof args[1]!=="function"){throw new Error(progress.data._getMsgText("jsdoMSG040"))}listenerData.fn=args[1];if(args.length>2){if(typeof args[2]!=="object"){throw new Error(progress.data._getMsgText("jsdoMSG041",evt))}listenerData.scope=args[2]}}progress.data.JSDOSession.prototype._eventNames=["offline","online"];progress.data.JSDOSession.prototype.validateSubscribe=validateJSDOSessionSubscribe;progress.data.JSDOSession.prototype.toString=function(radix){return"progress.data.JSDOSession"};progress.data.getSession=function(options){var deferred=new progress.util.Deferred,authProvider,authProviderInitObject={},session;function sessionRejectHandler(object,result,info){object=progress.util.Deferred.getParamObject(object,result,info);if(authProvider&&authProvider.hasClientCredentials()){var callback=function(){deferred.reject(object.result,object.info)};authProvider.logout().then(callback,callback)}else{deferred.reject(object.result,object.info)}}function callbackRejectHandler(reason){deferred.reject(progress.data.Session.GENERAL_FAILURE,{reason:reason})}function loginHandler(object){let jsdosession;try{if(typeof session==="undefined"){jsdosession=new progress.data.JSDOSession(options)}else{jsdosession=session}jsdosession.isAuthorized().then(function(){return jsdosession.addCatalog(options.catalogURI)},sessionRejectHandler).then(function(object,result,info){object=progress.util.Deferred.getParamObject(object,result,info);deferred.resolve(object.jsdosession,progress.data.Session.SUCCESS)},sessionRejectHandler)}catch(ex){sessionRejectHandler(jsdosession,progress.data.Session.GENERAL_FAILURE,{errorObject:ex})}}function callLogin(provider){var errorObject;if(typeof options.loginCallback!=="undefined"){options.loginCallback().then(function(result){try{provider.login(result.username,result.password).then(loginHandler,sessionRejectHandler)}catch(e){sessionRejectHandler(provider,progress.data.Session.GENERAL_FAILURE,{errorObject:e})}},callbackRejectHandler)}else if(options.username&&options.password){try{provider.login(options.username,options.password).then(loginHandler,sessionRejectHandler)}catch(e){sessionRejectHandler(provider,progress.data.Session.GENERAL_FAILURE,{errorObject:e})}}else{errorObject=new Error(progress.data._getMsgText("jsdoMSG052","getSession()"));sessionRejectHandler(provider,progress.data.Session.AUTHENTICATION_FAILURE,{errorObject:errorObject})}}if(typeof options!=="object"){throw new Error(progress.data._getMsgText("jsdoMSG503","getSession()","options","object"))}if(typeof options.loginCallback!=="undefined"&&typeof options.loginCallback!=="function"){throw new Error(progress.data._getMsgText("jsdoMSG503","getSession()","options.loginCallback","function"))}try{if(options.authenticationModel===progress.data.Session.AUTH_TYPE_SSO){if(!options.authenticationURI||!options.authProviderAuthenticationModel){throw new Error(progress.data._getMsgText("jsdoMSG509"))}}if(options.authenticationURI){authProviderInitObject.uri=options.authenticationURI;authProviderInitObject.authenticationModel=options.authProviderAuthenticationModel;if(typeof authProviderInitObject.authenticationModel!=="string"){throw new Error(progress.data._getMsgText("jsdoMSG502","progress.data.getSession","object","getSession","authProviderAuthenticationModel"))}}else{authProviderInitObject.uri=options.serviceURI;authProviderInitObject.authenticationModel=options.authenticationModel}authProvider=new progress.data.AuthenticationProvider(authProviderInitObject);options.authProvider=authProvider;if(authProvider.hasClientCredentials()){let jsdosession=new progress.data.JSDOSession(options),statusCode=0;jsdosession.isAuthorized().then(()=>{session=jsdosession;return},obj=>{statusCode=obj&&obj.info&&obj.info.xhr&&obj.info.xhr.status;return progress.util.Deferred.when([jsdosession.invalidate(),options.authProvider.logout()])}).then(()=>{if(statusCode===401){authProvider=new progress.data.AuthenticationProvider(authProviderInitObject);options.authProvider=authProvider;callLogin(authProvider)}else{loginHandler(authProvider)}})}else{if(authProvider.authenticationModel===progress.data.Session.AUTH_TYPE_ANON){authProvider.login().then(loginHandler,sessionRejectHandler)}else{callLogin(authProvider)}}}catch(error){sessionRejectHandler(null,progress.data.Session.GENERAL_FAILURE,{errorObject:error})}return deferred.promise()};progress.data.invalidateAllSessions=function(){var jsdosession,key,deferred=new progress.util.Deferred,jsdosessions=progress.data.ServicesManager._jsdosessions,invalidatePromises=[];try{for(key in jsdosessions){if(jsdosessions.hasOwnProperty(key)){jsdosession=jsdosessions[key];invalidatePromises.push(jsdosession.invalidate())}}progress.util.Deferred.when(invalidatePromises).then(function(){deferred.resolve(progress.data.Session.SUCCESS)},function(object,result,info){object=progress.util.Deferred.getParamObject(object,result,info);deferred.reject(progress.data.Session.GENERAL_FAILURE,info)})}catch(error){if(progress.util.Deferred.useJQueryPromises){throw error}else{deferred.reject(progress.data.Session.GENERAL_FAILURE,{errorObject:error})}}return deferred.promise()}})();if(typeof exports!=="undefined"){exports.progress=progress}(function(){"use strict";if(typeof progress==="undefined"){progress={}}if(typeof progress.data==="undefined"){progress.data={}}progress.data.AuthenticationProvider=function AuthenticationProvider(initObject){var authProv,authModel,uri;if(typeof initObject==="object"){this._checkStringArg("constructor",initObject.authenticationModel,"initObject.authenticationModel","initObject.authenticationModel");this._checkStringArg("constructor",initObject.uri,"init-object.uri","init-object.uri")}else{throw new Error(progress.data._getMsgText("jsdoMSG033","AuthenticationProvider","the constructor","The init-object argument was missing or invalid."))}authModel=initObject.authenticationModel.toLowerCase();switch(authModel){case progress.data.Session.AUTH_TYPE_ANON:this._initialize(initObject.uri,progress.data.Session.AUTH_TYPE_ANON,{_loginURI:progress.data.AuthenticationProvider._homeLoginURIBase});authProv=this;break;case progress.data.Session.AUTH_TYPE_BASIC:authProv=new progress.data.AuthenticationProviderBasic(initObject.uri);break;case progress.data.Session.AUTH_TYPE_FORM:authProv=new progress.data.AuthenticationProviderForm(initObject.uri);break;case progress.data.Session.AUTH_TYPE_FORM_SSO:authProv=new progress.data.AuthenticationProviderSSO(initObject.uri);break;case progress.data.Session.AUTH_TYPE_BEARER:authProv=new progress.data.AuthenticationProviderBearer(initObject.uri);break;default:throw new Error(progress.data._getMsgText("jsdoMSG502","AuthenticationProvider","init-object","constructor","authenticationModel"))}return authProv};progress.data.AuthenticationProvider.prototype._loginProto=function(sendParam){var deferred=new progress.util.Deferred,xhr,uriForRequest,header,that=this;try{if(this._loggedIn){throw new Error(progress.data._getMsgText("jsdoMSG051","AuthenticationProvider"))}xhr=new XMLHttpRequest;xhr.onreadystatechange=function(){if(xhr.readyState===4){try{that._processLoginResult(xhr,deferred)}catch(e){}}};if(progress.data.Session._useTimeStamp){uriForRequest=progress.data.Session._addTimeStampToURL(this._loginURI)}else{uriForRequest=this._loginURI}this._openLoginRequest(xhr,uriForRequest);xhr.setRequestHeader("Accept","application/json");xhr.send(sendParam)}catch(error){if(progress.util.Deferred.useJQueryPromises){throw error}else{deferred.reject(this,progress.data.Session.GENERAL_FAILURE,{errorObject:error})}}return deferred.promise()};progress.data.AuthenticationProvider.prototype.login=function(){return this._loginProto()};progress.data.AuthenticationProvider.prototype._openLoginRequest=function(xhr,uri){xhr.open("GET",uri,true);progress.data.Session._setNoCacheHeaders(xhr)};progress.data.AuthenticationProvider.prototype._processLoginResult=function(xhr,deferred){var result;if(xhr.status===200){this._loggedIn=true;this._storeInfo();result=progress.data.Session.SUCCESS}else if(xhr.status===401){result=progress.data.Session.AUTHENTICATION_FAILURE}else{result=progress.data.Session.GENERAL_FAILURE}this._settlePromise(deferred,result,{xhr:xhr})};progress.data.AuthenticationProvider.prototype.logout=function(){var deferred=new progress.util.Deferred;try{this._reset();deferred.resolve(this,progress.data.Session.SUCCESS,{})}catch(error){if(progress.util.Deferred.useJQueryPromises){throw error}else{deferred.reject(this,progress.data.Session.GENERAL_FAILURE,{errorObject:error})}}return deferred.promise()};progress.data.AuthenticationProvider.prototype.hasClientCredentials=function(){return this._loggedIn};progress.data.AuthenticationProvider.prototype.hasRefreshToken=function(){return false};progress.data.AuthenticationProvider.prototype._openRequestAndAuthorize=function(xhr,verb,uri,async,callback){var errorObject;if(this.hasClientCredentials()){xhr.open(verb,uri,async);xhr.setRequestHeader("Accept","application/json");callback(xhr)}else{errorObject=new Error(progress.data._getMsgText("jsdoMSG125","AuthenticationProvider"));callback(errorObject)}};progress.data.AuthenticationProvider.prototype._initialize=function(uriParam,authModel,targetURIs){var tempURI,target;Object.defineProperty(this,"uri",{get:function(){return this._uri},enumerable:true});Object.defineProperty(this,"authenticationModel",{get:function(){return this._authenticationModel},enumerable:true});if(uriParam[uriParam.length-1]==="/"){tempURI=uriParam.substring(0,uriParam.length-1)}else{tempURI=uriParam}for(target in targetURIs){if(targetURIs.hasOwnProperty(target)){this[target]=tempURI+targetURIs[target]}}this._authenticationModel=authModel;this._uri=uriParam;this._loggedIn=false;this._dataKeys={uri:".uri",loggedIn:".loggedIn"};if(typeof sessionStorage==="undefined"){throw new Error(progress.data._getMsgText("jsdoMSG126","AuthenticationProvider","sessionStorage"))}this._storage=sessionStorage;this._storageKey=this._uri;this._dataKeys.uri=this._storageKey+this._dataKeys.uri;this._dataKeys.loggedIn=this._storageKey+this._dataKeys.loggedIn;if(this._retrieveLoggedIn()){this._loggedIn=true}};progress.data.AuthenticationProvider.prototype._storeInfo=function(){this._storage.setItem(this._dataKeys.uri,JSON.stringify(this._uri));this._storage.setItem(this._dataKeys.loggedIn,JSON.stringify(this._loggedIn))};progress.data.AuthenticationProvider.prototype._retrieveInfoItem=function(propName){var jsonStr=this._storage.getItem(propName),value=null;if(jsonStr!==null){try{value=JSON.parse(jsonStr)}catch(e){value=null}}return value};progress.data.AuthenticationProvider.prototype._retrieveURI=function(){return this._retrieveInfoItem(this._dataKeys.uri)};progress.data.AuthenticationProvider.prototype._retrieveLoggedIn=function(){return this._retrieveInfoItem(this._dataKeys.loggedIn)};progress.data.AuthenticationProvider.prototype._clearInfo=function(info){this._storage.removeItem(this._dataKeys.uri);this._storage.removeItem(this._dataKeys.loggedIn)};progress.data.AuthenticationProvider.prototype._reset=function(){this._clearInfo();this._loggedIn=false};progress.data.AuthenticationProvider.prototype._settlePromise=function(deferred,result,info){if(result===progress.data.Session.SUCCESS){deferred.resolve(this,result,info)}else{deferred.reject(this,result,info)}};progress.data.AuthenticationProvider.prototype._checkStringArg=function(fnName,argToCheck,argPosition,argName){if(typeof argToCheck!=="string"){throw new Error(progress.data._getMsgText("jsdoMSG121","AuthenticationProvider",argPosition,"string",fnName))}else if(argToCheck.length===0){throw new Error(progress.data._getMsgText("jsdoMSG501","AuthenticationProvider",argName,fnName))}};progress.data.AuthenticationProvider._getAuthFailureReason=function(xhr){var contentType,jsonObject,result=progress.data.Session.AUTHENTICATION_FAILURE;if(xhr.status===401){contentType=xhr.getResponseHeader("Content-Type");if(contentType&&contentType.indexOf("application/json")>-1&&xhr.responseText){jsonObject=JSON.parse(xhr.responseText);if(jsonObject.error==="sso.token.expired_token"){result=progress.data.Session.EXPIRED_TOKEN}}}else{result=null}return result};Object.defineProperty(progress.data.AuthenticationProvider,"_homeLoginURIBase",{value:"/static/home.html",enumerable:true});Object.defineProperty(progress.data.AuthenticationProvider,"_springLoginURIBase",{value:"/static/auth/j_spring_security_check",enumerable:true});Object.defineProperty(progress.data.AuthenticationProvider,"_springLogoutURIBase",{value:"/static/auth/j_spring_security_logout",enumerable:true});Object.defineProperty(progress.data.AuthenticationProvider,"_springFormTokenLoginURIBase",{value:progress.data.AuthenticationProvider._springLoginURIBase+"?OECP=yes",enumerable:true});Object.defineProperty(progress.data.AuthenticationProvider,"_springFormTokenRefreshURIBase",{value:"/static/auth/token?op=refresh",enumerable:true})})();(function(){"use strict";progress.data.AuthenticationProviderBasic=function(uri){var defaultiOSBasicAuthTimeout,userName=null,password=null,fn;this._initialize(uri,progress.data.Session.AUTH_TYPE_BASIC,{_loginURI:progress.data.AuthenticationProvider._homeLoginURIBase});this._reset();function make_basic_auth_header(user,pw){var tok=user+":"+pw,hash=btoa(tok);return"Basic "+hash}this._reset=function(){userName=null;password=null;progress.data.AuthenticationProviderBasic.prototype._reset.apply(this)};this._openLoginRequest=function(xhr,uri){var auth;xhr.open("GET",uri,true);if(userName){auth=make_basic_auth_header(userName,password);xhr.setRequestHeader("Authorization",auth)}progress.data.Session._setNoCacheHeaders(xhr)};this._processLoginResult=function _basic_processLoginResult(xhr,deferred){progress.data.AuthenticationProviderBasic.prototype._processLoginResult.apply(this,[xhr,deferred]);if(!this._loggedIn){userName=null;password=null}};this.login=function(userNameParam,passwordParam){this._checkStringArg("login",userNameParam,1,"userName");this._checkStringArg("login",passwordParam,2,"password");userName=userNameParam;password=passwordParam;return this._loginProto()};this._openRequestAndAuthorize=function(xhr,verb,uri,async,callback){var auth,errorObject;if(this.hasClientCredentials()){xhr.open(verb,uri,async);if(userName){auth=make_basic_auth_header(userName,password);xhr.setRequestHeader("Authorization",auth)}progress.data.Session._setNoCacheHeaders(xhr);callback(xhr)}else{errorObject=new Error(progress.data._getMsgText("jsdoMSG125","AuthenticationProvider"));callback(errorObject)}}};function BasicProxy(){}BasicProxy.prototype=progress.data.AuthenticationProvider.prototype;progress.data.AuthenticationProviderBasic.prototype=new BasicProxy;progress.data.AuthenticationProviderBasic.prototype.constructor=progress.data.AuthenticationProviderBasic})();(function(){"use strict";progress.data.AuthenticationProviderBearer=function(uri){var bearerToken=null,fn;this._initialize(uri,progress.data.Session.AUTH_TYPE_BEARER,{_loginURI:progress.data.AuthenticationProvider._homeLoginURIBase});function make_Bearer_auth_header(token){return"Bearer "+token}this._reset=function(){bearerToken=null;progress.data.AuthenticationProviderBearer.prototype._reset.apply(this)};this._openLoginRequest=function(xhr,uri){var auth;xhr.open("GET",uri,true);if(bearerToken){auth=make_Bearer_auth_header(bearerToken);xhr.setRequestHeader("Authorization",auth)}progress.data.Session._setNoCacheHeaders(xhr)};this._processLoginResult=function _Bearer_processLoginResult(xhr,deferred){progress.data.AuthenticationProviderBearer.prototype._processLoginResult.apply(this,[xhr,deferred]);if(!this._loggedIn){bearerToken=null}};this.login=function(token){this._checkStringArg("login",token,1,"token");bearerToken=token;return this._loginProto()};this._openRequestAndAuthorize=function(xhr,verb,uri,async,callback){var auth,errorObject;if(this.hasClientCredentials()){xhr.open(verb,uri,async);if(bearerToken){auth=make_Bearer_auth_header(bearerToken);xhr.setRequestHeader("Authorization",auth)}progress.data.Session._setNoCacheHeaders(xhr)}else{errorObject=new Error(progress.data._getMsgText("jsdoMSG125","AuthenticationProvider"))}callback(errorObject)}};function BearerProxy(){}BearerProxy.prototype=progress.data.AuthenticationProvider.prototype;progress.data.AuthenticationProviderBearer.prototype=new BearerProxy;progress.data.AuthenticationProviderBearer.prototype.constructor=progress.data.AuthenticationProviderBearer})();(function(){"use strict";var fn;progress.data.AuthenticationProviderForm=function(uri){this._initialize(uri,progress.data.Session.AUTH_TYPE_FORM,{_loginURI:progress.data.AuthenticationProvider._springLoginURIBase,_logoutURI:progress.data.AuthenticationProvider._springLogoutURIBase})};function FormProxy(){}FormProxy.prototype=progress.data.AuthenticationProvider.prototype;progress.data.AuthenticationProviderForm.prototype=new FormProxy;progress.data.AuthenticationProviderForm.prototype.constructor=progress.data.AuthenticationProviderForm;progress.data.AuthenticationProviderForm.prototype.login=function(userNameParam,passwordParam){var deferred=new progress.util.Deferred,xhr,that=this;this._checkStringArg("login",userNameParam,1,"userName");this._checkStringArg("login",passwordParam,2,"password");return this._loginProto("j_username="+encodeURIComponent(userNameParam)+"&j_password="+encodeURIComponent(passwordParam)+"&submit=Submit")};progress.data.AuthenticationProviderForm.prototype._openLoginRequest=function(xhr,uri){xhr.open("POST",uri,true);xhr.setRequestHeader("Cache-Control","max-age=0");xhr.setRequestHeader("Pragma","no-cache");xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");xhr.withCredentials=true};progress.data.AuthenticationProviderForm.prototype.logout=function(){var deferred=new progress.util.Deferred,xhr,that=this;try{if(!this._loggedIn){deferred.resolve(this,progress.data.Session.SUCCESS,{})}else{xhr=new XMLHttpRequest;this._openLogoutRequest(xhr);xhr.onreadystatechange=function(){if(xhr.readyState===4){try{that._processLogoutResult(xhr,deferred)}catch(e){}}};xhr.send()}this._reset()}catch(error){if(progress.util.Deferred.useJQueryPromises){throw error}else{deferred.reject(this,progress.data.Session.GENERAL_FAILURE,{errorObject:error})}}return deferred.promise()};progress.data.AuthenticationProviderForm.prototype._openLogoutRequest=function(xhr){xhr.open("GET",this._logoutURI,true);xhr.setRequestHeader("Cache-Control","max-age=0");xhr.withCredentials=true;xhr.setRequestHeader("Accept","application/json")};progress.data.AuthenticationProviderForm.prototype._processLogoutResult=function(xhr,deferred){var result;if(xhr.status===200){result=progress.data.Session.SUCCESS}else if(xhr.status===401){result=progress.data.Session.SUCCESS}else{result=progress.data.Session.GENERAL_FAILURE}this._settlePromise(deferred,result,{xhr:xhr})};fn=progress.data.AuthenticationProviderForm.prototype._openRequestAndAuthorize;progress.data.AuthenticationProviderForm.prototype._openRequestAndAuthorize=function(xhr,verb,uri,async,callback){function afterSuper(errorObject){if(errorObject instanceof Error){callback(errorObject)}else{xhr.withCredentials=true;callback(xhr)}}try{progress.data.AuthenticationProviderForm.prototype._openRequestAndAuthorize._super.apply(this,[xhr,verb,uri,async,afterSuper])}catch(e){callback(e)}};progress.data.AuthenticationProviderForm.prototype._openRequestAndAuthorize._super=fn})();(function(){"use strict";var fn;progress.data.AuthenticationProviderSSO=function(uri){var that=this,_automaticTokenRefresh,temp,ssoTokenInfo=null,tokenDataKeys={token:".access_token",refreshToken:".refresh_token",tokenType:".token_type",expiration:".expires_in",accessTokenExpiration:".accessTokenExpiration"};function storeTokenInfo(info){var date,accessTokenExpiration;if(info.access_token.length){that._storage.setItem(tokenDataKeys.token,JSON.stringify(info.access_token))}if(info.refresh_token.length){that._storage.setItem(tokenDataKeys.refreshToken,JSON.stringify(info.refresh_token));date=new Date;accessTokenExpiration=date.getTime()+info.expires_in*1e3*.75;that._storage.setItem(tokenDataKeys.accessTokenExpiration,JSON.stringify(accessTokenExpiration))}else{that._storage.removeItem(tokenDataKeys.refreshToken);that._storage.removeItem(tokenDataKeys.accessTokenExpiration)}that._storage.setItem(tokenDataKeys.tokenType,JSON.stringify(info.token_type));that._storage.setItem(tokenDataKeys.expiration,JSON.stringify(info.expires_in))}function retrieveTokenProperty(propName){var jsonStr=that._storage.getItem(propName),value=null;if(jsonStr!==null){try{value=JSON.parse(jsonStr)}catch(e){value=null}}return value}function retrieveToken(){return retrieveTokenProperty(tokenDataKeys.token)}function retrieveRefreshToken(){return retrieveTokenProperty(tokenDataKeys.refreshToken)}function retrieveAccessTokenExpiration(){return retrieveTokenProperty(tokenDataKeys.accessTokenExpiration)}function retrieveTokenType(){return retrieveTokenProperty(tokenDataKeys.tokenType)}function getToken(){return retrieveToken()}function retrieveExpiration(){return retrieveTokenProperty(tokenDataKeys.expiration)}function clearTokenInfo(info){that._storage.removeItem(tokenDataKeys.token);that._storage.removeItem(tokenDataKeys.refreshToken);that._storage.removeItem(tokenDataKeys.tokenType);that._storage.removeItem(tokenDataKeys.expiration);that._storage.removeItem(tokenDataKeys.accessTokenExpiration)}function openRefreshRequest(xhr){xhr.open("POST",that._refreshURI,true);xhr.setRequestHeader("Cache-Control","max-age=0");xhr.withCredentials=true;xhr.setRequestHeader("Content-Type","application/json");xhr.setRequestHeader("Accept","application/json")}function processRefreshResult(xhr,deferred){var errorObject,result,ssoTokenJSON;if(xhr.status===200){try{ssoTokenInfo=JSON.parse(xhr.responseText);if(ssoTokenInfo.access_token){storeTokenInfo(ssoTokenInfo);result=progress.data.Session.SUCCESS}else{result=progress.data.Session.GENERAL_FAILURE;errorObject=new Error(progress.data._getMsgText("jsdoMSG049","AuthenticationProvider","refresh",progress.data._getMsgText("jsdoMSG050")))}}catch(ex){result=progress.data.Session.GENERAL_FAILURE;errorObject=new Error(progress.data._getMsgText("jsdoMSG049","AuthenticationProvider","refresh",ex.message))}}else if(xhr.status===401){that._reset();result=progress.data.Session.AUTHENTICATION_FAILURE}else{result=progress.data.Session.GENERAL_FAILURE}that._settlePromise(deferred,result,{xhr:xhr,errorObject:errorObject})}this._processLoginResult=function(xhr,deferred){var errorObject,result,ssoTokenJSON;if(xhr.status===200){this._loggedIn=true;try{ssoTokenInfo=JSON.parse(xhr.responseText);if(ssoTokenInfo.access_token){storeTokenInfo(ssoTokenInfo);result=progress.data.Session.SUCCESS}else{result=progress.data.Session.GENERAL_FAILURE;errorObject=new Error(progress.data._getMsgText("jsdoMSG049","AuthenticationProvider","login",progress.data._getMsgText("jsdoMSG050")))}}catch(ex){result=progress.data.Session.GENERAL_FAILURE;errorObject=new Error(progress.data._getMsgText("jsdoMSG049","AuthenticationProvider","login",ex.message))}if(result!==progress.data.Session.SUCCESS){var callback=function(params){params=progress.util.Deferred.getParamObject(params);params.provider._settlePromise(deferred,result,{xhr:xhr,errorObject:errorObject})};this.logout().then(callback,callback);return}}else if(xhr.status===401){result=progress.data.Session.AUTHENTICATION_FAILURE}else{result=progress.data.Session.GENERAL_FAILURE}this._settlePromise(deferred,result,{xhr:xhr})};this._reset=function(){progress.data.AuthenticationProviderSSO.prototype._reset.apply(this);clearTokenInfo();ssoTokenInfo=null};this._openRequestAndAuthorize=function(xhr,verb,uri,async,callback){var that=this,date,errorObject;function afterRefreshCheck(provider,result,info){if(result===progress.data.Session.AUTHENTICATION_FAILURE){callback(new Error(progress.data._getMsgText("jsdoMSG060")))}else{progress.data.AuthenticationProviderSSO.prototype._openRequestAndAuthorize.apply(that,[xhr,verb,uri,async,function(errorObject){if(errorObject instanceof Error){callback(errorObject)}else{xhr.setRequestHeader("Authorization","oecp "+getToken());callback(xhr)}}])}}if(this.hasClientCredentials()){date=new Date;if(this.automaticTokenRefresh&&this.hasRefreshToken()&&date.getTime()>retrieveAccessTokenExpiration()){try{var callback=function(params,result,info){params=progress.util.Deferred.getParamObject(params,result,info);afterRefreshCheck(params.provider,params.result,params.info)};this.refresh().then(callback,callback)}catch(e){callback(e)}}else{afterRefreshCheck(this,progress.data.Session.SUCCESS,null)}}else{errorObject=new Error(progress.data._getMsgText("jsdoMSG125","AuthenticationProvider"));callback(errorObject)}};this.hasClientCredentials=function(){return retrieveToken()===null?false:true};this.refresh=function(){var deferred=new progress.util.Deferred,xhr;try{if(!this._loggedIn){throw new Error(progress.data._getMsgText("jsdoMSG053","AuthenticationProvider","refresh"))}if(!this.hasRefreshToken()){throw new Error(progress.data._getMsgText("jsdoMSG054","AuthenticationProvider"))}xhr=new XMLHttpRequest;openRefreshRequest(xhr);xhr.onreadystatechange=function(){if(xhr.readyState===4){try{processRefreshResult(xhr,deferred)}catch(e){}}};xhr.send('{"token_type":"'+retrieveTokenType()+'","refresh_token":"'+retrieveRefreshToken()+'"}')}catch(error){if(progress.util.Deferred.useJQueryPromises){throw error}else{deferred.reject(this,progress.data.Session.GENERAL_FAILURE,{errorObject:error})}}return deferred.promise()};this.hasRefreshToken=function(){return retrieveRefreshToken()===null?false:true};this._initialize(uri,progress.data.Session.AUTH_TYPE_FORM_SSO,{_loginURI:progress.data.AuthenticationProvider._springFormTokenLoginURIBase,_logoutURI:progress.data.AuthenticationProvider._springLogoutURIBase,_refreshURI:progress.data.AuthenticationProvider._springFormTokenRefreshURIBase});_automaticTokenRefresh=true;Object.defineProperty(this,"automaticTokenRefresh",{get:function(){return _automaticTokenRefresh},set:function(value){if(value===true||value===false){_automaticTokenRefresh=value}else{throw new Error(progress.data._getMsgText("jsdoMSG061","AuthenticationProvider","automaticTokenRefresh"))}},enumerable:true});this._dataKeys.automaticTokenRefresh=this._storageKey+".automaticTokenRefresh";temp=this._retrieveInfoItem(this._dataKeys.automaticTokenRefresh);if(temp===false){_automaticTokenRefresh=false}tokenDataKeys.token=this._storageKey+tokenDataKeys.token;tokenDataKeys.refreshToken=this._storageKey+tokenDataKeys.refreshToken;tokenDataKeys.tokenType=this._storageKey+tokenDataKeys.tokenType;tokenDataKeys.expiration=this._storageKey+tokenDataKeys.expiration;tokenDataKeys.accessTokenExpiration=this._storageKey+tokenDataKeys.accessTokenExpiration;if(retrieveToken()){this._loggedIn=true}};function SSOProxy(){}SSOProxy.prototype=progress.data.AuthenticationProviderForm.prototype;progress.data.AuthenticationProviderSSO.prototype=new SSOProxy;progress.data.AuthenticationProviderSSO.prototype.constructor=progress.data.AuthenticationProviderSSO;fn=progress.data.AuthenticationProviderSSO.prototype._storeInfo;progress.data.AuthenticationProviderSSO.prototype._storeInfo=function(){progress.data.AuthenticationProviderSSO.prototype._storeInfo._super.apply(this);this._storage.setItem(this._dataKeys.automaticTokenRefresh,JSON.stringify(this._automaticTokenRefresh))};progress.data.AuthenticationProviderSSO.prototype._storeInfo._super=fn;fn=progress.data.AuthenticationProviderSSO.prototype._clearInfo;progress.data.AuthenticationProviderSSO.prototype._clearInfo=function(){progress.data.AuthenticationProviderSSO.prototype._clearInfo._super.apply(this);this._storage.removeItem(this._dataKeys.automaticTokenRefresh)};progress.data.AuthenticationProviderSSO.prototype._clearInfo._super=fn})(); //# sourceMappingURL=progress.jsdo.min.js.map \ No newline at end of file diff --git a/lib/progress.jsdo.min.js.map b/lib/progress.jsdo.min.js.map index 3e8b590..448a398 100644 --- a/lib/progress.jsdo.min.js.map +++ b/lib/progress.jsdo.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["progress.jsdo.js"],"names":["isNativeScript","isNodeJS","pkg_xmlhttprequest","pkg_nodeLocalstorage","pkg_nativescriptLocalstorage","pkg_fileSystemAccess","pkg_base64","XMLHttpRequest","require","e","console","error","localStorage","sessionStorage","exception1","exception2","btoa","encode","exception3","LocalStorage","module","progress","data","util","STRING_OBJECT_TYPE","DATE_OBJECT_TYPE","CHARACTER_ABL_TYPE","Deferred","this","_deferred","prototype","promise","that","useJQueryPromises","$","_jQuerydeferred","_promise","Error","Promise","resolve","reject","_resolveArguments","_rejectArguments","setTimeout","apply","arg1","arg2","arg3","arguments","object","getParamObject1","when","deferreds","all","objectName","result","info","JSDOSession","AuthenticationProvider","JSDO","success","xhr","request","batch","info2","log","getParamObject","Observable","_filterObservers","observers","fn","scope","operation","filter","el","validateSubscribe","args","evt","listenerData","length","undefined","subscribe","_getMsgText","toString","_events","toLowerCase","message","push","unsubscribe","trigger","op","Array","slice","call","forEach","unsubscribeAll","saveToLocalStorage","name","dataObj","setItem","JSON","stringify","readFromLocalStorage","jsonStr","getItem","parse","clearLocalStorage","removeItem","_convertToABLWhereString","tableRef","logic","idx","field","fieldInfo","type","format","operator","value","ablType","filters","whereOperators","eq","neq","gt","gte","lt","lte","contains","doesnotcontain","endswith","startswith","isnull","isnotnull","isempty","isnotempty","_name","_jsdo","_fields","origName","_getObjectType","replace","_getABLType","_format","join","_convertToSQLQueryString","addSelect","fieldFormat","filterStr","usingLike","_getFormat","Object","fmt","values","formatRegExp","match","index","placeholderFormat","parseInt","_toString","substring","str","_formatDate","_pad","number","digits","zeros","end","String","date","dateFormatRegExp","minutes","sign","getDate","getMonth","getFullYear","getHours","getMinutes","getSeconds","getMilliseconds","getTime","getTimezoneOffset","toISOString","jsdoSettingsProcessor","jsdoSettings","authenticationModel","PROGRESS_JSDO_PCT_MAX_EMPTY_BLOCKS","PROGRESS_JSDO_OP_STRING","PROGRESS_JSDO_ROW_STATE_STRING","_nextid","_uidprefix","Date","now","UID_MAX_VALUE","_getNextId","uid","msg","msgs","jsdoMSG000","jsdoMSG001","jsdoMSG002","jsdoMSG003","jsdoMSG004","jsdoMSG005","jsdoMSG006","jsdoMSG007","jsdoMSG008","jsdoMSG009","jsdoMSG010","jsdoMSG011","jsdoMSG012","jsdoMSG020","jsdoMSG021","jsdoMSG022","jsdoMSG023","jsdoMSG024","jsdoMSG025","jsdoMSG026","jsdoMSG030","jsdoMSG031","jsdoMSG032","jsdoMSG033","jsdoMSG034","jsdoMSG035","jsdoMSG036","jsdoMSG037","jsdoMSG038","jsdoMSG039","jsdoMSG040","jsdoMSG041","jsdoMSG042","jsdoMSG043","jsdoMSG044","jsdoMSG045","jsdoMSG046","jsdoMSG047","jsdoMSG048","jsdoMSG049","jsdoMSG050","jsdoMSG051","jsdoMSG052","jsdoMSG053","jsdoMSG054","jsdoMSG055","jsdoMSG056","jsdoMSG057","jsdoMSG058","jsdoMSG059","jsdoMSG060","jsdoMSG061","jsdoMSG062","jsdoMSG100","jsdoMSG101","jsdoMSG110","jsdoMSG111","jsdoMSG112","jsdoMSG113","jsdoMSG114","jsdoMSG115","jsdoMSG116","jsdoMSG117","jsdoMSG118","jsdoMSG119","jsdoMSG120","jsdoMSG121","jsdoMSG122","jsdoMSG123","jsdoMSG124","jsdoMSG125","jsdoMSG126","jsdoMSG127","jsdoMSG500","jsdoMSG501","jsdoMSG502","jsdoMSG503","jsdoMSG504","jsdoMSG505","jsdoMSG506","jsdoMSG507","jsdoMSG508","jsdoMSG509","jsdoMSG510","jsdoMSG511","jsdoMSG512","jsdoMSG998","getMsgText","n","text","i","RegExp","PluginManager","_plugins","addPlugin","plugin","getPlugin","JSIndexEntry","JSTableRef","jsdo","tableName","_schema","_primaryKeys","_processed","_visited","record","_data","_index","_tmpIndex","_hasEmptyBlocks","_beforeImage","_added","_changed","_deleted","_lastErrors","_convertForServer","_createIndex","block","id","idProperty","_id","_resource","_needCompaction","_compact","newDataArray","_loadBeforeImageData","jsonObject","beforeImageJsonIndex","keyFields","prodsBeforeData","_dataSetName","tmpIndex","record2","recordId","key","tmpKeyIndex","jsrecord","tmpDataIndex","tmpDeletedIndex","j","keys","_findById","_getKey","key2","_remove","copy","_copyRecord","_tableRef","_deleteProdsProperties","JSRecord","tableObject","beforeRecord","prodsErrors","item","_errorString","_clearData","_setRecord","hasData","_nestChildren","_getDataWithNestedChildren","_getRelatedData","getData","params","_getData","numEmptyBlocks","sort","top","sortFields","dir","sortObject","_processSortFields","_getCompareFn","skip","splice","_recToDataObject","includeChildren","array","dataObject","_children","_buffers","_dataProperty","_recFromDataObject","getSchema","setSchema","schema","fieldName","add","_add","create","trackChanges","setWorkingRecord","prefixElement","maxItems","_getDefaultValue","_getArrayField","items","_convertType","useRelationships","_relationship","_parent","childFieldName","parentFieldName","v","autoSort","_sortRecords","_sortFn","_sortObject","_needsAutoSorting","_sort","ret","_compareFields","parentRecord","childBuf","_isNested","k","childRecord","m","_hasNestedChild","_findFirst","ignoreRelationships","childTable","_defaultTableRef","assign","update","remove","bTrackChanges","getId","getErrors","getErrorString","findById","find","foreach","_inforeach","_equalRecord","rec1","rec2","value1","value2","caseSensitive","toUpperCase","keyObject","jsrec1","jsrec2","sortAscending","defineProperty","_autoSort","get","set","enumerable","writeable","_caseSensitive","fields","indexOf","sortOrder","setSortFields","setSortFn","addRecords","addMode","isInvoke","_addRecords","acceptChanges","rejectChanges","_undoCreate","_undoUpdate","_undoDelete","hasChanges","getChanges","rowState","_OP_CREATE","_OP_UPDATE","_OP_DELETE","_clearErrorStrings","_applyChanges","_rejected","acceptRowChanges","found","rejectRowChanges","hasNestedChild","childBufObj","_saveBeforeImageUpdate","_sortRecord","resNameOrParmObj","serviceName","_super","Session","_defineProperty","fnGet","element","ARRAY_INDEX_SEPARATOR","isNaN","_hasSubmitOperation","_hasCUDOperations","_numBuffers","_async","operations","_session","_useSubmit","autoApplyChanges","_localStorage","_fillMergeMode","autoFill","eventName","prop","ServicesManager","getResource","url","dataProperty","buffer","properties","fnName","generic","myservice","getService","service","_pushJSDOs","buf","_properties","primaryKeys","trim","$ref","relations","relationship","childName","parentName","relationFields","defaultValue","t","d","isDate","arrayFieldName","isDataSet","_invokeComplete","async","deferred","_invokeSuccess","_invokeError","_httpRequest","method","reqBody","afterOpenRequest","input","setRequestHeader","send","exception","_checkServiceResponse","onCompleteFn","onSuccessFn","onErrorFn","onreadystatechange","onReadyStateChangeGeneric","useRequest","settings","_openRequest","_getDataObject","oldUseRelationships","_getDataObjectAsNested","bufObj","_unnestData","obj","itemType","elements","split","convertItem","parseFloat","_clearErrors","clearErrorString","_setAllRecordsRejected","param","changes","hasErrors","hasRejected","hasCommittedRecords","_allRecordsRejected","_someRecordsRejected","fill","objParam","mapping","getMethodProperties","mappingType","mergeMode","MODE_APPEND","MODE_EMPTY","MODE_MERGE","MODE_REPLACE","requestMapping","capabilities","_fillSuccess","_fillError","_fillComplete","read","errorObject","_execGenericOperation","_convertRequestData","operationStr","_OP_READ","_OP_SUBMIT","_initConvertForServer","_convertFieldsForServer","_ablTypeNeedsConversion","beforeData","_convertTableData","tableData","_convertRowData","_convertField","resultArray","_convertDate","needsConversion","_undefWorkingRecord","saveChanges","useSubmit","_checkThatJSDOHasRequiredOperations","_syncDataSetForSubmit","_syncDataSetForCUD","_syncSingleTable","checkedDelete","checkedCreate","checkedUpdate","_confirmOperationExists","invoke","_syncTableRef","rowData","requestData","dataSetObject","_useBeforeImage","_createComplete","_createSuccess","_createError","useBeforeImageFormat","beforeObject","beforeRowData","sendOnlyChanges","_updateComplete","_updateSuccess","_updateError","childTableName","_deleteComplete","_deleteSuccess","_deleteError","opType","useBeforeImage","_isBatchComplete","_isBatchSuccess","_updateLastErrors","_fireAfterSaveChanges","fireAfterSaveChanges","addedRecords","complete","completeFn","_saveChangesComplete","successFn","_saveChangesSuccess","errorFn","_saveChangesError","jsrecords","_createChangeSet","_createTTChangeSet","_saveChangesSuccessTT","dataSetName","alwaysCreateTable","changeSetJsonObject","dataSetJsonObject","_hasChanges","_addDeletesToChangeSet","_addCreatesToChangeSet","_addChangesToChangeSet","tempTableJsonObject","_addRowToTTChangeSet","hasOwnProperty","event","_createDataAndChangeSet","_addRecordsToObject","_doesRecordHaveCreateBIData","_addCreatedRowToChangeSet","_doesRecordHaveUpdateBIData","_addChangedRowToChangeSet","changedId","hasUpdates","_addDeletedRowToChangeSet","beforeTableJsonObject","_getTableInBeforeJsonObject","source","target","onlyChangesRecord","newObject","deleteRowState","beforeImageJsonObject","dataHasBeenProcessed","checkBeforeImage","isAfterSame","_sameData","isBeforeSame","_getBeforeRecordFromObject","afterRecord","tablename","record1","_mergeRead","datasetBuffer","srcData","_mergeUpdateRecord","_setErrorString","errorString","setInBeforeTable","_arrayFromDataObject","_mergeUpdateForCUD","hasError","tableJsonObject","prods_id","_getErrorStringFromJsonObject","_checkForDeleteError","beforeJsonObject","_mergeUpdateForSubmit","_fireCUDTriggersForSubmit","errorsJsonObject","response","responseMapping","entry","deleteProdsProps","_checkSaveComplete","records","status","_getErrorsFromRequest","errors","errorArray","retValString","responseObject","responseText","_retVal","RETVAL","_errors","_errorNum","_errorMsg","APP_ERROR","errorNum","ERROR","statusText","errorText","DATA_ERROR","_mergeInvoke","dataParameterName","_tempTableName","xType","readyState","_saveClientContextId","concat","setProperties","propertiesObject","setProperty","propertyName","propertyValue","getProperties","getProperty","saveLocal","dataMode","callee","ALL_DATA","CHANGES_ONLY","_prepareDataObjectForLocalStorage","readLocal","_hasMatchingSchema","_restoreFromLocalStorage","addLocalRecords","_containsPrimaryKeys","storageObject","isValid","deleteLocal","option","_restoreDataForTable","_operations","constructor","radix","sortDir","ablFilter","sqlQuery","methodProperties","position","capabilitiesObject","reqCapabilities","options","doConversion","orderBy","ui","UITableRef","_listview","_detailPage","_listviewContent","addItem","detailForm","clearItems","itemTemplate","UIHelper","_itemTemplate","listviewElement","document","getElementById","innerHTML","_getFormFieldValue","detailPageName","val","_setFormField","display","pageName","showListView","uiTableRef","html","attr","filterable","listview","autoLink","each","bind","getListViewRecord","onSelect","childElementCount","children","onclick","getFormFields","tmpFields","htmltext","charAt","fieldLabel","title","fieldTemplate","_fieldTemplate","htmlIElement","getAttribute","getFormRecord","_getIdOfElement","setDetailPage","setListView","pos","_defaultUITableRef","_uiTableRef","cnt","_defaultItemTemplate","_defaultFieldTemplate","setItemTemplate","template","setFieldTemplate","_services","_resources","_sessions","_jsdosessions","addResource","resource","addService","addSession","catalogURI","session","addJSDOSession","jsdosession","getSession","cleanSession","servicesKey","resourcesKey","sessionsKey","services","resources","sessions","jsdosessions","extractParamsFromURL","urlParams","paramName","c","addCatalog","baseAddress","address","path","primaryKey","tableProperties","RelationName","opname","verb","func","definition","Boolean","encodeURIComponent","reqParam","unwrapped","paramsFromURL","printDebugInfo","resourceName","cSchema","cOperations","MobileServiceObject","_uri","uri","ContextProperties","contextObject","contextString","header","setContextProperty","setContext","context","getContext","getContextProperty","defPropSupported","isUserAgentiOS","isFirefox","isEdge","isIE","canPassCredentialsToOpenWithCORS","defaultiOSBasicAuthTimeout","deviceIsOnline","restApplicationIsOnline","oepingAvailable","defaultPartialPingURI","partialPingURI","_storageKey","_authProvider","customCredentials","storedAuthModel","storedURI","newURI","stateWasReadFromStorage","_silent","warn","navigator","userAgent","canPassCredentialsToOpen","_onlineHandler","setDeviceIsOnline","_offlineHandler","DEVICE_OFFLINE","window","addEventListener","_catalogURIs","_jsdos","onOpenRequest","_password","_userName","_loginTarget","_serviceURI","_loginResult","_loginHttpStatus","_clientContextId","_authenticationModel","AUTH_TYPE_ANON","newval","AUTH_TYPE_FORM","AUTH_TYPE_BASIC","AUTH_TYPE_SSO","storeSessionInfo","_lastSessionXHR","loginResult","LOGIN_SUCCESS","_pingInterval","_timeoutID","_autoping","clearTimeout","_contextProperties","isInvalidated","setAuthProvider","userName","loginTarget","serviceURI","catalogURIs","loginHttpStatus","clientContextId","lastSessionXHR","infoName","retrieveSessionInfo","clearSessionInfo","storeAllSessionInfo","pingInterval","clearAllSessionInfo","setSessionInfoFromStorage","authproviderInitObject","setLoginResult","setUserName","setServiceURI","setLoginHttpStatus","setClientContextID","setRestApplicationIsOnline","setOepingAvailable","setPartialPingURI","newname","sessionObject","setLoginTarget","pushCatalogURIs","pushService","serviceObject","findService","setClientContextIDfromXHR","getResponseHeaderNoError","ccid","setLastSessionXHR","headerName","allHeaders","_pdsResponseHeaders","regExp","getAllResponseHeaders","getResponseHeader","callback","urlPlusCCID","afterOpenAndAuthorize","arg","setRequestHeaderFromContextProps","formPreTest","_isInvalidated","_prependAppURL","_addCCIDtoURL","_useTimeStamp","_addTimeStampToURL","_openRequestAndAuthorize","_setXHRCredentials","_addWithCredentialsAndAccept","pingTestCallback","cbArgs","foundOeping","pingResult","_onReadyStateChangeGeneric","_requestTimeout","onResponseFn","onResponseProcessedFn","GENERAL_FAILURE","pdsession","_disconnect","_processDisconnectResult","_reinitializeAfterLogout","SUCCESS","_disconnectComplete","errObj","pwSave","unameSave","login","loginUserName","loginPassword","uname","pw","isAsync","iOSBasicAuthTimeout","uriForRequest","password","restURLtemp","LOGIN_GENERAL_FAILURE","_setNoCacheHeaders","_isAsync","_afterFormPretestLogin","_processLoginResult","_loginComplete","_iosTimeOutExpired","abort","_jsdosession","isFormPreTest","ASYNC_PENDING","formLoginParams","theSession","doFormLogin","oldXHR","contentType","needAuth","statusFromjson","handleJSONLoginResponse","_gotLoginForm","open","cbparams","_afterFormLogin","_gotLoginFailure","pingTestArgs","pingURI","fireEventIfOfflineChange","onReadyStateFn","_pingtestOnReadyStateChange","_makePingURI","_sendPing","LOGIN_AUTHENTICATION_FAILURE","updateContextPropsFromResponse","logout","_processLogoutResult","_logoutComplete","withCredentials","_anonymousLogoutOK","invalidate","cleanServicesManager","logoutSucceeded","basicStatusOK","arg4","catalogUserName","catalogPassword","catalogIndex","authProvider","addCatalogAfterOpen","_processAddCatalogResult","_addCatalogComplete","_catalogIndex","offlineAddCatalog","_catalogURI","CATALOG_ALREADY_LOADED","_catalogHttpStatus","servicedata","serviceURL","theJSDOSession","toggleOnlineState","_parseCatalog","useXClientProps","xClientProps","_getAuthFailureReason","ping","pingArgs","_onReadyStateChangePing","offlineReason","doNotFireEvent","_processPingResult","_isOnlineStateChange","isOnline","stateChanged","wasOnline","connected","offlineObservers","offline","onlineObservers","online","localPingArgs","pingResponseJSON","appServerStatus","connectedBeforeCallback","assumeOepingFormat","usingOepingFormat","AppServerStatus","SERVER_OFFLINE","WEB_APPLICATION_OFFLINE","PingStatus","APPSERVER_OFFLINE","sendPingAfterOpen","auth","_make_basic_auth","urlPart1","urlPart2","jsessionidStr","catalogdata","oldURL","newURL","pat","test","acceptString","user","tok","hash","loginFormIDString","_findStringInResponseHTML","loginFailureIdentificationString","searchString","status_code","status_txt","contextHeader","hasClientCredentials","SEQ_MAX_VALUE","_tsseq","_tsprefix1","_tsprefix2","_getNextTimeStamp","seq","Math","floor","random","round","timeStamp","AUTHENTICATION_FAILURE","validateSessionSubscribe","_eventNames","_pdsession","JSDOs","settlePromise","fulfill","genericSessionEventHandler","myDeferred","onAfterAddCatalog","settleResult","EXPIRED_TOKEN","_overallCatalogResult","_results","_numCatalogsProcessed","_numCatalogs","_processedPromise","details","onAfterLogout","onPingComplete","username","callIsAuthorized","isAuthorized","then","disconnect","unameOrOpts","opts","numCatalogs","addResult","authProv","cbresult","LOGIN_AUTHENTICATION_REQUIRED","AUTH_TYPE_FORM_SSO","err","validateJSDOSessionSubscribe","authProviderInitObject","sessionRejectHandler","callbackRejectHandler","reason","loginHandler","ex","callLogin","provider","loginCallback","authenticationURI","authProviderAuthenticationModel","invalidateAllSessions","invalidatePromises","exports","initObject","authModel","_checkStringArg","_initialize","_loginURI","_homeLoginURIBase","AuthenticationProviderBasic","AuthenticationProviderForm","AuthenticationProviderSSO","_loginProto","sendParam","_loggedIn","_openLoginRequest","_storeInfo","_settlePromise","_reset","hasRefreshToken","uriParam","targetURIs","tempURI","_dataKeys","loggedIn","_storage","_retrieveLoggedIn","_retrieveInfoItem","propName","_retrieveURI","_clearInfo","argToCheck","argPosition","argName","_springLoginURIBase","make_basic_auth_header","_basic_processLoginResult","userNameParam","passwordParam","BasicProxy","_logoutURI","_springLogoutURIBase","FormProxy","_openLogoutRequest","afterSuper","_automaticTokenRefresh","temp","ssoTokenInfo","tokenDataKeys","token","refreshToken","tokenType","expiration","accessTokenExpiration","storeTokenInfo","access_token","refresh_token","expires_in","token_type","retrieveTokenProperty","retrieveToken","retrieveRefreshToken","retrieveAccessTokenExpiration","retrieveTokenType","getToken","retrieveExpiration","clearTokenInfo","openRefreshRequest","_refreshURI","processRefreshResult","ssoTokenJSON","afterRefreshCheck","automaticTokenRefresh","refresh","_springFormTokenLoginURIBase","_springFormTokenRefreshURIBase","SSOProxy"],"mappings":";;;;;;;;;;;;;;;;;CA0CC,WAiBG,IAAIA,eAAiB,MACjBC,SAAW,MAEf,IAAIC,mBAAkC,iBAClCC,qBAAkC,oBAClCC,6BAAkC,4BAClCC,qBAAkC,iCAClCC,WAAkC,UAMtC,UAAWC,iBAAmB,YAAa,CACvCN,SAAW,KACX,IACIM,eAAiBC,QAAQ,GAAKN,oBAAoBK,eAGpD,MAAME,GACJC,QAAQC,MAAM,mEACZ,2CAKV,IAAKV,kBACUW,eAAiB,oBACdC,iBAAmB,aAAc,CAC/C,IACIL,QAAQ,GAAKH,sBACbL,eAAiB,KACnB,MAAMc,YACJd,eAAiB,OAQzB,GAAIA,eAAgB,CAChB,IAEI,UAAWa,iBAAmB,YAAa,CACvCA,eAAiBL,QAAQ,GAAKJ,8BAElC,UAAWQ,eAAiB,YAAa,CACrCA,aAAeJ,QAAQ,GAAKJ,+BAElC,MAAMW,YACJL,QAAQC,MAAM,0FACR,qDAIV,IACI,UAAWK,OAAS,YAAa,CAC7BA,KAAOR,QAAQ,GAAKF,YAAYW,QAEtC,MAAMC,YACJR,QAAQC,MAAM,kEACR,oCAKd,GAAIV,SAAU,CACV,IAAIkB,aACJ,UAAWP,eAAiB,YAAa,CACrC,IACI,IAAIQ,OAASZ,QAAQ,GAAKL,sBAC1BgB,aAAeC,OAAOD,aACtBP,aAAe,IAAIO,aAAa,cAClC,MAAMV,GACJC,QAAQC,MAAM,qFACR,8CAId,UAAWE,iBAAmB,oBAChBM,eAAiB,YAAa,CACxCN,eAAiB,IAAIM,aAAa,cAItC,IACI,UAAWH,OAAS,YAAa,CAC7BA,KAAOR,QAAQ,GAAKF,YAAYW,QAEtC,MAAMC,YACJR,QAAQC,MAAM,6DACR,sCA7GlB,IAkHC,WAIG,UAAWU,WAAa,YAAa,CACjCA,YAGJ,UAAWA,SAASC,OAAS,YAAa,CACtCD,SAASC,QAGbD,SAASE,QAET,IAAIC,mBAAqB,SACrBC,iBAAmB,OACnBC,mBAAqB,YAOzBL,SAASE,KAAKI,SAA0B,WACpC,SAASA,WACLC,KAAKC,aAMTF,SAASG,UAAUC,QAAU,WACzB,IAAIC,KAAOJ,KAEX,GAAIP,SAASE,KAAKI,SAASM,kBAAmB,CAC1C,UAAU,IAAQ,oBAAsBC,EAAU,WAAM,WAAY,CAChEN,KAAKC,UAAUM,gBAAkBD,EAAEP,WACnCC,KAAKQ,SAAWR,KAAKC,UAAUM,gBAAgBJ,cAC5C,CACH,MAAM,IAAIM,MAAM,kDAEjB,CACHT,KAAKQ,SAAW,IAAIE,QAAQ,SAAUC,QAASC,QAC3CR,KAAKH,UAAUU,QAAUA,QACzBP,KAAKH,UAAUW,OAASA,SAIhC,GAAIZ,KAAKa,mBAAqBb,KAAKc,iBAAkB,CACjDC,WAAW,WACP,GAAIX,KAAKS,kBAAmB,CACxBT,KAAKO,QAAQK,MAAMZ,KAAMA,KAAKS,wBAC3B,GAAIT,KAAKU,iBAAkB,CAC9BV,KAAKQ,OAAOI,MAAMZ,KAAMA,KAAKU,oBAElC,KAIP,OAAOd,KAAKQ,UAOhBT,SAASG,UAAUS,QAAU,SAAUM,KAAMC,KAAMC,MAC/C,GAAInB,KAAKQ,SAAU,CACf,GAAIR,KAAKC,UAAUM,gBAAiB,CAChCP,KAAKC,UAAUM,gBAAgBI,QAAQK,MAAMhB,KAAMoB,eAChD,CACH,IAAIC,OAAS5B,SAASE,KAAKI,SAASuB,gBAAgBL,KAAMC,KAAMC,MAChEnB,KAAKC,UAAUU,QAAQU,aAExB,CACHrB,KAAKa,kBAAoBO,YAOjCrB,SAASG,UAAUU,OAAS,SAAUK,KAAMC,KAAMC,MAC9C,GAAInB,KAAKQ,SAAU,CACf,GAAIR,KAAKC,UAAUM,gBAAiB,CAChCP,KAAKC,UAAUM,gBAAgBK,OAAOI,MAAMhB,KAAMoB,eAC/C,CACH,IAAIC,OAAS5B,SAASE,KAAKI,SAASuB,gBAAgBL,KAAMC,KAAMC,MAChEnB,KAAKC,UAAUW,OAAOS,aAEvB,CACHrB,KAAKc,iBAAmBM,YAOhCrB,SAASM,kBAAoB,MAK7BN,SAASwB,KAAO,SAAUC,WACtB,GAAI/B,SAASE,KAAKI,SAASM,kBAAmB,CAC1C,OAAOC,EAAEiB,KAAKP,MAAMV,EAAGkB,eACpB,CACH,OAAOd,QAAQe,IAAID,aAO3BzB,SAASuB,gBAAkB,SAAUL,KAAMC,KAAMC,MAC7C,IAAIE,UACAK,WAEJ,IACI,UAAW,OAAW,aAAiBT,OAAS,KAAO,CACnDI,OAAOM,OAAST,KAChBG,OAAOO,KAAOT,SACX,CAIH,GAAIF,gBAAgBxB,SAASC,KAAKmC,YAAa,CAC3CH,WAAa,mBACV,GAAIT,gBAAgBxB,SAASC,KAAKoC,uBAAwB,CAC7DJ,WAAa,gBACV,GAAIT,gBAAgBxB,SAASC,KAAKqC,KAAM,CAC3CL,WAAa,YACV,UAAU,OAAW,SAAU,CAClCA,WAAa,aACV,CACHA,kBAAmB,KAGvBL,OAAOK,YAAcT,KACrB,GAAIS,aAAe,OAAQ,CACvBL,OAAOW,QAAUd,KACjB,GAAIC,MAAQA,KAAKc,IAAK,CAClBZ,OAAOa,QAAUf,UACd,GAAIA,MAAQA,KAAKgB,MAAO,CAC3Bd,OAAOa,QAAUf,SACd,CACHE,OAAOO,KAAOT,UAEf,CACH,GAAIO,aAAe,SAAU,CACzBL,OAAOO,KAAOV,KACd,GAAIC,KAAM,CACNE,OAAOe,MAAQjB,UAEhB,CACHE,OAAOM,OAAST,KAChBG,OAAOO,KAAOT,QAI5B,MAAMtC,GACJC,QAAQuD,IAAI,0DAGhB,OAAOhB,QAMXtB,SAASuC,eAAiB,SAAUrB,KAAMC,KAAMC,MAC5C,IAAIE,UAEJ,GAAI5B,SAASE,KAAKI,SAASM,kBAAmB,CAC1CgB,OAAS5B,SAASE,KAAKI,SAASuB,gBAAgBL,KAAMC,KAAMC,UACzD,CACH,UAAU,OAAW,YAAa,CAC9BE,OAAOM,OAAST,KAChBG,OAAOO,KAAOT,KACdF,KAAOI,OAEX,OAAOJ,KAGX,OAAOI,QAGX,OAAOtB,SApK4B,GA4KvCN,SAASE,KAAK4C,WAAa,WAqBvB,SAASC,iBAAiBC,UAAWC,GAAIC,MAAOC,WAC5C,OAAOH,UAAUI,OAAO,SAAUC,IAC9B,GAAIA,GAAGJ,KAAOA,IAAMI,GAAGH,QAAUA,OAASG,GAAGF,YAAcA,UAAW,CAClE,OAAOE,KAEZ9C,MAMPA,KAAK+C,kBAAoB,SAAUC,KAAMC,IAAKC,cAE1C,GAAIF,KAAKG,QAAU,UAAaH,KAAK,KAAO,iBAAqBA,KAAK,KAAO,SAAW,CACpFE,aAAaN,UAAYI,KAAK,GAC9BE,aAAaR,GAAKM,KAAK,GACvBE,aAAaP,MAAQK,KAAK,QAEvB,GAAIA,KAAKG,QAAU,UAAaH,KAAK,KAAO,iBAAqBA,KAAK,KAAO,WAAa,CAC7FE,aAAaN,UAAYQ,UACzBF,aAAaP,MAAQK,KAAK,GAC1BE,aAAaR,GAAKM,KAAK,OACpB,CACH,MAAM,IAAIvC,QAgClBT,KAAKqD,UAAY,SAAUJ,IAAKL,UAAWF,GAAIC,OAC3C,IAAIO,aACAT,UAEJ,IAAKQ,IAAK,CACN,MAAM,IAAIxC,MAAMhB,SAASC,KAAK4D,YAAY,aAActD,KAAKuD,WAAY,cAG7E,UAAWN,MAAQ,SAAU,CACzB,MAAM,IAAIxC,MAAMhB,SAASC,KAAK4D,YAAY,aAActD,KAAKuD,WACzD,YAAa9D,SAASC,KAAK4D,YAAY,gBAG/CtD,KAAKwD,QAAUxD,KAAKwD,YACpBP,IAAMA,IAAIQ,cACVP,cAAgBR,GAAIU,UAAWT,MAAOS,UAAWR,UAAWQ,WAE5D,IACIpD,KAAK+C,kBAAkB3B,UAAW6B,IAAKC,cACzC,MAAOrE,GACL,MAAM,IAAI4B,MAAMhB,SAASC,KAAK4D,YAAY,aAActD,KAAKuD,WACzD,YAAa1E,EAAE6E,UAGvBjB,UAAYzC,KAAKwD,QAAQP,SAGzBR,UAAYD,iBAAiBC,UAAWS,aAAaR,GACjDQ,aAAaP,MAAOO,aAAaN,WACrCH,UAAUkB,KAAKT,cACflD,KAAKwD,QAAQP,KAAOR,UAEpB,OAAOzC,MAsBXA,KAAK4D,YAAc,SAAUX,IAAKL,UAAWF,GAAIC,OAC7C,IAAIO,aACAT,UAEJ,IAAKQ,IAAK,CACN,MAAM,IAAIxC,MAAMhB,SAASC,KAAK4D,YAAY,aAActD,KAAKuD,WAAY,gBAG7E,UAAWN,MAAQ,SAAU,CACzB,MAAM,IAAIxC,MAAMhB,SAASC,KAAK4D,YAAY,aAActD,KAAKuD,WACzD,cAAe9D,SAASC,KAAK4D,YAAY,gBAGjDtD,KAAKwD,QAAUxD,KAAKwD,YACpBP,IAAMA,IAAIQ,cACVP,cAAgBR,GAAIU,UAAWT,MAAOS,UAAWR,UAAWQ,WAC5D,IACIpD,KAAK+C,kBAAkB3B,UAAW6B,IAAKC,cACzC,MAAOrE,GAEL,MAAM,IAAI4B,MAAMhB,SAASC,KAAK4D,YAAY,aAActD,KAAKuD,WACzD,cAAe1E,EAAE6E,UAGzBjB,UAAYzC,KAAKwD,QAAQP,SACzB,GAAIR,UAAUU,OAAS,EAAG,CACtBnD,KAAKwD,QAAQP,KAAOT,iBAAiBC,UAAWS,aAAaR,GACzDQ,aAAaP,MAAOO,aAAaN,WAGzC,OAAO5C,MAkBXA,KAAK6D,QAAU,SAAUZ,IAAKL,UAAWI,MACrC,IAAIP,UACAqB,GAEJ,IAAKb,IAAK,CACN,MAAM,IAAIxC,MAAMhB,SAASC,KAAK4D,YAAY,aAActD,KAAKuD,WAAY,YAG7EvD,KAAKwD,QAAUxD,KAAKwD,YACpBP,IAAMA,IAAIQ,cACVhB,UAAYzC,KAAKwD,QAAQP,SACzB,GAAIR,UAAUU,OAAS,EAAG,CACtBH,KAAOe,MAAM7D,UAAU8D,MAAMC,KAAK7C,WAElC,GAAKA,UAAU+B,QAAU,UACNF,MAAQ,iBACRL,YAAc,SAAW,CAGxCkB,GAAKlB,UACLI,KAAOA,KAAKG,OAAS,EAAIH,KAAKgB,MAAM,WACjC,GAAI5C,UAAU+B,QAAU,UAAaF,MAAQ,SAAW,CAC3Da,GAAKV,UACLJ,KAAOA,KAAKG,OAAS,EAAIH,KAAKgB,MAAM,UACjC,CACH,MAAM,IAAIvD,MAAMhB,SAASC,KAAK4D,YAAY,aAActD,KAAKuD,WAAY,YAG7Ed,UAAUyB,QAAQ,SAAUpB,IACxB,GAAIA,GAAGF,YAAckB,GAAI,CACrBhB,GAAGJ,GAAG1B,MAAM8B,GAAGH,MAAOK,SAMlC,OAAOhD,MAOXA,KAAKmE,eAAiB,SAAUlB,IAAKL,WACjC,IAAIH,UAEJ,GAAIQ,IAAK,CACLjD,KAAKwD,QAAUxD,KAAKwD,YACpB,UAAWP,MAAQ,SAAU,CACzBA,IAAMA,IAAIQ,cACVhB,UAAYzC,KAAKwD,QAAQP,SAEzBR,UAAUyB,QAAQ,SAAUpB,IACxB,GAAIA,GAAGF,UAAW,CACd5C,KAAK4D,YAAYX,IAAKH,GAAGF,UAAWE,GAAGJ,GAAII,GAAGH,WAC3C,CACH3C,KAAK4D,YAAYX,IAAKH,GAAGJ,GAAII,GAAGH,SAErC3C,WAEJ,CACHA,KAAKwD,WAGT,OAAOxD,OAUfP,SAASC,KAAKH,aAAe,SAASA,eAGlC,UAAWP,eAAiB,YAAa,CAErC,MAAM,IAAIyB,MAAMhB,SAASC,KAAK4D,YAAY,aAAc,6BAA8B,iBAM1FtD,KAAKoE,mBAAqB,SAAUC,KAAMC,SACtCtF,aAAauF,QAAQF,KAAMG,KAAKC,UAAUH,WAG9CtE,KAAK0E,qBAAuB,SAAUL,MAElC,IAAIM,QAAU3F,aAAa4F,QAAQP,MAC/BC,QAAU,KAEd,GAAIK,UAAY,KAAM,CAClB,IACIL,QAAUE,KAAKK,MAAMF,SACvB,MAAO9F,GACLyF,QAAU,MAGlB,OAAOA,SAGXtE,KAAK8E,kBAAoB,SAAUT,MAC/BrF,aAAa+F,WAAWV,QAiBhC5E,SAASE,KAAKqF,yBAA2B,SAAUC,SAAUpC,QACzD,IAAIlB,UACAuD,MAAQrC,OAAOqC,OAAS,MACxBC,IACAhC,OACAiC,MACAC,UACAC,KACAC,OACAC,SACAC,MACAC,QAEAC,QAAU9C,OAAO8C,UAAY9C,QAE7B+C,gBACIC,GAAI,IACJC,IAAK,KACLC,GAAI,IACJC,IAAK,KACLC,GAAI,IACJC,IAAK,KACLC,SAAW,QACXC,eAAgB,QAChBC,SAAU,UACVC,WAAY,SACZC,OAAQ,SACRC,UAAW,YACXC,QAAS,UACTC,WAAY,cAGpB,IAAKvB,IAAM,EAAGhC,OAASwC,QAAQxC,OAAQgC,IAAMhC,OAAQgC,KAAO,EAAG,CAC3DtC,OAAS8C,QAAQR,KACjBC,MAAQvC,OAAOuC,MACfK,MAAQ5C,OAAO4C,MAEf,GAAI5C,OAAO8C,QAAS,CAChB9C,OAASpD,SAASE,KAAKqF,yBAAyBC,SAAUpC,YACvD,CAEH,GAAIuC,OAASH,SAAS0B,MAAO,CACzBtB,UAAYJ,SAAS2B,MAAM3B,SAAS0B,OAAOE,QAAQzB,MAAM3B,eACzD,GAAI4B,WAAaA,UAAUyB,SAAU,CACjC1B,MAAQC,UAAUyB,UAI1BtB,SAAWI,eAAe/C,OAAO2C,UAEjC,GAAIA,WAAapC,UAAW,CACxB,MAAM,IAAI3C,MAAM,gBAAkBoC,OAAO2C,SAAW,kBAGxD,OAAQ3C,OAAO2C,UACf,IAAK,SACL,IAAK,YACL,IAAK,UACL,IAAK,aACDC,MAAQrC,UACR,MAGJ,GAAIoC,UAAYC,QAAUrC,UAAW,CACjCkC,KAAO7F,SAASE,KAAKoH,eAAetB,OAIpC,GAAIH,OAAS1F,mBAAoB,CAC7B2F,OAAS,QACTE,MAAQA,MAAMuB,QAAQ,KAAM,WACzB,GAAI1B,OAASzF,iBAAkB,CAClC6F,QAAUT,SAASgC,YAAYpE,OAAOuC,OACtC,GAAIM,UAAY,OAAQ,CACpBH,OAAS,8BACN,GAAIG,UAAY,cAAe,CAElCH,OAAS,0DACN,CACHA,OAAS,mDAEV,CACHA,OAAS,MAMb,GAAIC,WAAa,SAAWA,WAAa,UAAW,CAChD,GAAIF,OAAS1F,mBAAoB,CAC7B,MAAM,IAAIa,MAAM,6CAA+CoC,OAAO2C,SACtD,4BAEpB,GAAI3C,OAAO2C,WAAa,iBAAkB,CACtCD,OAAS,OAAS,QAAUA,OAAS,aAClC,GAAI1C,OAAO2C,WAAa,WAAY,CACvCD,OAAS,OAAS,QAAUA,OAAS,YAClC,CACHA,OAAS,0BAEV,CACHA,OAAS,WAAaA,OAG1B1C,OAASpD,SAASE,KAAKuH,QAAQ3B,OAAQC,SAAUC,MAAOL,YACrD,GAAII,UAAYC,QAAUrC,UAAW,CACxC,GAAIP,OAAO2C,WAAa,WAAa3C,OAAO2C,WAAa,aAAc,CACnEE,QAAUT,SAASgC,YAAY7B,OAC/B,GAAIM,UAAY5F,mBAAoB,CAChC,MAAM,IAAIW,MAAM,6CAA+CoC,OAAO2C,SACtD,+BAEpB,GAAI3C,OAAO2C,WAAa,UAAW,CAC/BD,OAAS,gBACN,GAAI1C,OAAO2C,WAAa,aAAc,CACzCD,OAAS,iBAEV,CACH,GAAI1C,OAAO2C,WAAa,SAAU,CAC9BD,OAAS,eACN,GAAI1C,OAAO2C,WAAa,YAAa,CACxCD,OAAS,eACN,CACHA,OAAS,aAKjB1C,OAASpD,SAASE,KAAKuH,QAAQ3B,OAAQC,SAAUC,MAAOL,QAIhEzD,OAAOgC,KAAKd,QAGhBA,OAASlB,OAAOwF,KAAK,IAAMjC,MAAQ,KAEnC,GAAIvD,OAAOwB,OAAS,EAAG,CACnBN,OAAS,IAAMA,OAAS,IAG5B,OAAOA,QAYXpD,SAASE,KAAKyH,yBAA2B,SAAUnC,SAAUpC,OAAQwE,WACjE,IAAI1F,UACAuD,MAAQrC,OAAOqC,OAAS,MACxBC,IACAhC,OACAiC,MACAE,KACAC,OACAC,SACAC,MACA6B,YACA3B,QAAU9C,OAAO8C,UAAY9C,QAC7B0E,UACAC,UAAY,KAEZ5B,gBACIC,GAAI,IACJC,IAAK,KACLC,GAAI,IACJC,IAAK,KACLC,GAAI,IACJC,IAAK,KACLC,SAAW,OACXC,eAAgB,WAChBC,SAAU,OACVC,WAAY,OACZC,OAAQ,SACRC,UAAW,YACXC,QAAS,UACTC,WAAY,cAGpB,UAAWW,YAAc,YAAa,CAClCA,UAAY,MAGhB,IAAKlC,IAAM,EAAGhC,OAASwC,QAAQxC,OAAQgC,IAAMhC,OAAQgC,KAAO,EAAG,CAC3DtC,OAAS8C,QAAQR,KACjBC,MAAQvC,OAAOuC,MACfK,MAAQ5C,OAAO4C,MAEf,GAAI5C,OAAO8C,QAAS,CAChB4B,UAAY9H,SAASE,KAAKyH,yBAAyBnC,SAAUpC,OAAQ,WAClE,CACH2C,SAAWI,eAAe/C,OAAO2C,UAEjC,GAAIA,WAAapC,UAAW,CACxB,MAAM,IAAI3C,MAAM,gBAAkBoC,OAAO2C,SAAW,kBAGxD,OAAQ3C,OAAO2C,UACf,IAAK,SACL,IAAK,YACL,IAAK,UACL,IAAK,aACDC,MAAQrC,UACR,MAGJ,GAAIoC,UAAYC,QAAUrC,UAAW,CACjCkC,KAAO7F,SAASE,KAAKoH,eAAetB,OAEpC,GAAID,WAAa,QAAUA,WAAa,WAAY,CAChD,GAAIF,OAAS1F,mBAAoB,CAC7B,MAAM,IAAIa,MAAM,6CAA+CoC,OAAO2C,SACtD,6BAIxB,GAAIF,OAAS1F,mBAAoB,CAC7B2F,OAAS,QACTE,MAAQA,MAAMuB,QAAQ,KAAM,WACzB,GAAI1B,OAASzF,iBAAkB,CAClCyH,YAAcrC,SAASwC,WAAWrC,OAClC,GAAIkC,cAAgB,OAAQ,CACxB/B,OAAS,wBACN,GAAI+B,cAAgB,YAAa,CACpC/B,OAAS,qBACN,GAAI+B,cAAgB,OAAQ,CAC/B/B,OAAS,iBAEV,CACHA,OAAS,MAKb,GAAI1C,OAAO2C,WAAa,aAAc,CAClCD,OAAS,cACN,GAAI1C,OAAO2C,WAAa,WAAY,CACvCD,OAAS,cACN,GAAI1C,OAAO2C,WAAa,YAAc3C,OAAO2C,WAAa,iBAAkB,CAC/ED,OAAS,cACN,CACHiC,UAAY,MAGhB,GAAIA,UAAW,CACX/B,MAAQA,MAAMuB,QAAQ,KAAM,OAC5BvB,MAAQA,MAAMuB,QAAQ,KAAM,OAGhCzB,OAAS,WAAaA,OACtBgC,UAAY9H,SAASE,KAAKuH,QAAQ3B,OAAQC,SAAUC,MAAOL,YACxD,GAAII,UAAYC,QAAUrC,UAAW,CACxC,GAAIP,OAAO2C,WAAa,WAAa3C,OAAO2C,WAAa,aAAc,CACnEF,KAAOL,SAAS4B,QAAQzB,MAAM3B,eAAe6B,KAC7C,GAAIA,OAAS1F,mBAAmB6D,cAAe,CAC3C,MAAM,IAAIhD,MAAM,6CAA+CoC,OAAO2C,SACtD,4BAEpB,GAAI3C,OAAO2C,WAAa,UAAW,CAC/BD,OAAS,gBACN,GAAI1C,OAAO2C,WAAa,aAAc,CACzCD,OAAS,iBAEV,CACH,GAAI1C,OAAO2C,WAAa,SAAU,CAC9BD,OAAS,mBACN,GAAI1C,OAAO2C,WAAa,YAAa,CACxCD,OAAS,sBACN,CACHA,OAAS,gBAKjBgC,UAAY9H,SAASE,KAAKuH,QAAQ3B,OAAQC,SAAUC,MAAOL,QAInEzD,OAAOgC,KAAK4D,WAGhBA,UAAY5F,OAAOwF,KAAK,IAAMjC,MAAQ,KAEtC,GAAIvD,OAAOwB,OAAS,EAAG,CACnBoE,UAAY,IAAMA,UAAY,IAGlC,GAAIF,YAAc,KAAM,CACpBE,UAAY,iBAAmBtC,SAAS0B,MAAQ,UAAYY,UAGhE,OAAOA,WAUX9H,SAASE,KAAKoH,eAAiB,SAAUtB,OAErC,OAAOiC,OAAOxH,UAAUqD,SAASU,KAAKwB,OAAOzB,MAAM,GAAI,IAW3DvE,SAASE,KAAKuH,QAAU,SAAUS,KAE9B,IAAIC,OAASxG,UACTyG,aAAe,uBAGnB,OAAOF,IAAIX,QAAQa,aAAc,SAAUC,MAAOC,MAAOC,mBACrD,IAAIvC,MAAQmC,OAAOK,SAASF,MAAO,IAAM,GAEzC,OAAOtI,SAASE,KAAKuI,UAAUzC,MAAOuC,kBAAoBA,kBAAkBG,UAAU,GAAK,OAanG1I,SAASE,KAAKuI,UAAY,SAAUzC,MAAOkC,KACvC,IAAIS,IAEJ,GAAIT,IAAK,CACL,GAAIlI,SAASE,KAAKoH,eAAetB,SAAW,OAAQ,CAChD,OAAOhG,SAASE,KAAK0I,YAAY5C,MAAOkC,MAIhD,UAAWlC,QAAU,SAAU,CAC3B2C,IAAO3C,MAAMlC,eACV,CACH6E,IAAO3C,QAAUrC,UAAYqC,MAAQ,GAGzC,OAAO2C,KAYX3I,SAASE,KAAK2I,KAAO,SAAUC,OAAQC,QACnC,IAAIC,OAAS,GAAI,IAAK,KAAM,MAAO,QAC/BC,IAEJH,OAASI,OAAOJ,QAChBC,OAASA,QAAU,EACnBE,IAAMF,OAASD,OAAOpF,OAEtB,GAAIuF,IAAK,CACL,OAAOD,MAAMD,QAAQL,UAAU,EAAGO,KAAOH,OAE7C,OAAOA,QAWX9I,SAASE,KAAK0I,YAAc,SAAUO,KAAMrD,QAExC,IAAIsD,iBACA,uDAGJ,OAAOtD,OAAOyB,QAAQ6B,iBAAkB,SAAUf,OAC9C,IAAIgB,QACAnH,OACAoH,KAEJ,GAAIjB,QAAU,KAAM,CAChBnG,OAASlC,SAASE,KAAK2I,KAAKM,KAAKI,gBAC9B,GAAIlB,QAAU,KAAM,CACvBnG,OAASlC,SAASE,KAAK2I,KAAKM,KAAKK,WAAa,QAC3C,GAAInB,QAAU,OAAQ,CACzBnG,OAASlC,SAASE,KAAK2I,KAAKM,KAAKM,cAAe,QAC7C,GAAIpB,QAAU,KAAM,CACvBnG,OAASlC,SAASE,KAAK2I,KAAKM,KAAKO,iBAC9B,GAAIrB,QAAU,KAAM,CACvBnG,OAASlC,SAASE,KAAK2I,KAAKM,KAAKQ,mBAC9B,GAAItB,QAAU,KAAM,CACvBnG,OAASlC,SAASE,KAAK2I,KAAKM,KAAKS,mBAC9B,GAAIvB,QAAU,MAAO,CACxBnG,OAASlC,SAASE,KAAK2I,KAAKM,KAAKU,kBAAmB,QACjD,GAAIxB,QAAU,MAAO,CACxBnG,OAASgH,OAAOC,KAAKW,gBAClB,GAAIzB,QAAU,MAAO,CAExBgB,QAAUF,KAAKY,oBACfT,KAAOD,QAAU,EACjBnH,QAAUoH,KAAO,IAAM,KAAOD,aAC3B,GAAIhB,QAAU,MAAO,CACxBnG,OAASiH,KAAKa,cAGlB,OAAO9H,SAAWyB,UAAYzB,OAASmG,MAAM9D,MAAM,EAAG8D,MAAM3E,OAAS,MAQ7E1D,SAASE,KAAK+J,sBAAwB,SAASA,sBAAsBC,cACjE,UAAWA,eAAiB,SAAU,CAClC,GAAIA,aAAaC,sBAAyBxG,WAAauG,aAAaC,sBAAyB,GAAI,CAC7FD,aAAaC,oBAAsB,gBAr6BnD,IAg8BA,WAII,IAAIC,mCAAqC,GACrCC,yBAA2B,OAAQ,SAAU,OAAQ,SAAU,SAAU,UACzEC,gCAAkC,GAAI,UAAW,GAAI,WAAY,WAIrE,UAAWtK,WAAa,YAAa,CACjCA,YAEJ,UAAWA,SAASC,OAAS,YAAa,CACtCD,SAASC,QAGbD,SAASC,KAAKsK,QAAU,EACxBvK,SAASC,KAAKuK,WAAa,IAAOC,KAAKC,IAAMD,KAAKC,OAAS,IAAID,MAAOX,WAGtE,IAAIa,cAAgB,gBAEpB3K,SAASC,KAAK2K,WAAa,WACvB,IAAIC,MAAQ7K,SAASC,KAAKsK,QAC1B,GAAIM,KAAOF,cAAe,CACtB3K,SAASC,KAAKsK,QAAUM,IAAM,EAC9B7K,SAASC,KAAKuK,WAAa,IAAOC,KAAKC,IAAMD,KAAKC,OAAS,IAAID,MAAOX,WAG1E,OAAO9J,SAASC,KAAKuK,WAAa,IAAMK,KAI5C,IAAIC,OACJA,IAAIC,QAKJD,IAAIC,KAAKC,WAAa,4BACtBF,IAAIC,KAAKE,WAAa,+EACtBH,IAAIC,KAAKG,WAAa,+CACtBJ,IAAIC,KAAKI,WAAa,yDACtBL,IAAIC,KAAKK,WAAa,sDACtBN,IAAIC,KAAKM,WAAa,qEACtBP,IAAIC,KAAKO,WAAa,8DACtBR,IAAIC,KAAKQ,WAAa,oDACtBT,IAAIC,KAAKS,WAAa,0DACtBV,IAAIC,KAAKU,WAAa,yEACtBX,IAAIC,KAAKW,WAAa,iEACtBZ,IAAIC,KAAKY,WAAa,uCAClB,+CACJb,IAAIC,KAAKa,WAAa,+CACtBd,IAAIC,KAAKc,WAAa,mEACtBf,IAAIC,KAAKe,WAAa,kEACtBhB,IAAIC,KAAKgB,WAAa,wDACtBjB,IAAIC,KAAKiB,WAAa,gEACtBlB,IAAIC,KAAKkB,WAAa,qDACtBnB,IAAIC,KAAKmB,WAAa,mDACtBpB,IAAIC,KAAKoB,WAAa,gCAClB,4DACJrB,IAAIC,KAAKqB,WAAa,mCACtBtB,IAAIC,KAAKsB,WAAa,qEACtBvB,IAAIC,KAAKuB,WAAa,0EACtBxB,IAAIC,KAAKwB,WAAa,sCACtBzB,IAAIC,KAAKyB,WAAa,oDACtB1B,IAAIC,KAAK0B,WAAa,4EACtB3B,IAAIC,KAAK2B,WAAa,+CACtB5B,IAAIC,KAAK4B,WAAa,4CACtB7B,IAAIC,KAAK6B,WAAa,iDACtB9B,IAAIC,KAAK8B,WAAa,yCACtB/B,IAAIC,KAAK+B,WAAa,wCACtBhC,IAAIC,KAAKgC,WAAa,6CACtBjC,IAAIC,KAAKiC,WAAa,gDACtBlC,IAAIC,KAAKkC,WAAa,uEAClB,6EACJnC,IAAIC,KAAKmC,WAAa,wDACtBpC,IAAIC,KAAKoC,WAAa,mDACtBrC,IAAIC,KAAKqC,WAAa,sCACtBtC,IAAIC,KAAKsC,WAAa,uBACtBvC,IAAIC,KAAKuC,WAAa,qEACtBxC,IAAIC,KAAKwC,WAAa,yCACtBzC,IAAIC,KAAKyC,WAAa,gCACtB1C,IAAIC,KAAK0C,WAAa,iGACtB3C,IAAIC,KAAK2C,WAAa,+EACtB5C,IAAIC,KAAK4C,WAAa,iFACtB7C,IAAIC,KAAK6C,WAAa,wGACtB9C,IAAIC,KAAK8C,WAAa,oFACtB/C,IAAIC,KAAK+C,WAAa,0BACtBhD,IAAIC,KAAKgD,WAAa,8GACtBjD,IAAIC,KAAKiD,WAAa,iFAClB,kDACJlD,IAAIC,KAAKkD,WAAa,8DAClB,8EACJnD,IAAIC,KAAKmD,WAAa,0EAClB,qFACJpD,IAAIC,KAAKoD,WAAa,0DACtBrD,IAAIC,KAAKqD,WAAa,0FAGtBtD,IAAIC,KAAKsD,WAAa,oDACtBvD,IAAIC,KAAKuD,WAAa,8CAGtBxD,IAAIC,KAAKwD,WAAa,+DAClB,8BACJzD,IAAIC,KAAKyD,WAAa,wDACtB1D,IAAIC,KAAK0D,WAAa,2EACtB3D,IAAIC,KAAK2D,WAAa,+DAClB,sEACJ5D,IAAIC,KAAK4D,WAAa,uDACtB7D,IAAIC,KAAK6D,WAAa,gDACtB9D,IAAIC,KAAK8D,WAAa,oDACtB/D,IAAIC,KAAK+D,WAAa,kEACtBhE,IAAIC,KAAKgE,WAAa,oCACtBjE,IAAIC,KAAKiE,WAAa,8DACM,sCAC5BlE,IAAIC,KAAKkE,WAAa,kEACtBnE,IAAIC,KAAKmE,WAAa,qDACtBpE,IAAIC,KAAKoE,WAAa,uEACtBrE,IAAIC,KAAKqE,WAAa,2DACtBtE,IAAIC,KAAKsE,WAAa,iEACE,wDACxBvE,IAAIC,KAAKuE,WAAa,qEACtBxE,IAAIC,KAAKwE,WAAa,2BACtBzE,IAAIC,KAAKyE,WAAa,gFAGtB1E,IAAIC,KAAK0E,WAAa,oDACtB3E,IAAIC,KAAK2E,WAAa,0DACtB5E,IAAIC,KAAK4E,WAAa,kFAClB,sBACJ7E,IAAIC,KAAK6E,WAAa,oCACtB9E,IAAIC,KAAK8E,WAAa,wDACtB/E,IAAIC,KAAK+E,WAAa,+CAEtBhF,IAAIC,KAAKgF,WAAa,2DAEtBjF,IAAIC,KAAKiF,WAAa,oEACtBlF,IAAIC,KAAKkF,WAAa,+EAClB,sFACJnF,IAAIC,KAAKmF,WAAa,0EAClB,iFACJpF,IAAIC,KAAKoF,WAAa,6DACtBrF,IAAIC,KAAKqF,WAAa,0GAClB,0CACJtF,IAAIC,KAAKsF,WAAa,sDAEtBvF,IAAIC,KAAKuF,WAAa,wEAEtBxF,IAAIyF,WAAa,SAAUC,EAAGjN,MAC1B,IAAIkN,KAAO3F,IAAIC,KAAKyF,GAChBE,EACJ,IAAKD,KAAM,CACP,MAAM,IAAIzP,MAAM,8CAEpB,IAAK0P,EAAI,EAAGA,EAAI/O,UAAU+B,OAAQgN,GAAK,EAAG,CACtCD,KAAOA,KAAKlJ,QAAQ,IAAIoJ,OAAO,MAAQD,EAAI,MAAO,KAAM/O,UAAU+O,IAGtE,OAAOD,MAGXzQ,SAASC,KAAK4D,YAAciH,IAAIyF,WAEhCvQ,SAASC,KAAK2Q,iBACd5Q,SAASC,KAAK2Q,cAAcC,YAE5B7Q,SAASC,KAAK2Q,cAAcE,UAAY,SAASlM,KAAMmM,QACnD,GAAI/Q,SAASC,KAAK2Q,cAAcC,SAASjM,QAAUjB,UAAW,CAC1D3D,SAASC,KAAK2Q,cAAcC,SAASjM,MAAQmM,WAE5C,CACD,MAAM,IAAI/P,MAAM,mBAAqB4D,KAAO,8BAIpD5E,SAASC,KAAK2Q,cAAcI,UAAY,SAAUpM,MAC9C,OAAO5E,SAASC,KAAK2Q,cAAcC,SAASjM,OAGhD5E,SAASC,KAAKgR,aAAe,SAASA,aAAa3I,OAC/C/H,KAAK+H,MAAQA,OAGjBtI,SAASC,KAAKiR,WAAa,SAASA,WAAWC,KAAMC,WACjD7Q,KAAK4G,MAAQgK,KACb5Q,KAAK2G,MAAQkK,UACb7Q,KAAK8Q,QAAU,KACf9Q,KAAK+Q,aAAe,KACpB/Q,KAAK6G,QAAU,KACf7G,KAAKgR,cACLhR,KAAKiR,SAAW,MAGhBjR,KAAKkR,OAAS,KAGdlR,KAAKmR,SACLnR,KAAKoR,UACLpR,KAAKqR,aACLrR,KAAKsR,gBAAkB,MAGvBtR,KAAKuR,gBACLvR,KAAKwR,UACLxR,KAAKyR,YACLzR,KAAK0R,YACL1R,KAAK2R,eACL3R,KAAK4R,kBAEL5R,KAAK6R,aAAe,WAChB,IAAI1B,EAAG2B,MAAOC,GAAIC,WAClBhS,KAAKoR,UACLpR,KAAKqR,aACLrR,KAAKsR,gBAAkB,MACvB,IAAKnB,EAAI,EAAGA,EAAInQ,KAAKmR,MAAMhO,OAAQgN,GAAK,EAAG,CACvC2B,MAAQ9R,KAAKmR,MAAMhB,GACnB,IAAK2B,MAAO,CACR9R,KAAKsR,gBAAkB,KACvB,SAEJS,GAAK/R,KAAKmR,MAAMhB,GAAG8B,IACnB,IAAKF,GAAI,CACLC,WAAahS,KAAK4G,MAAMsL,UAAUF,WAClC,UAAU,YAAgB,SAAU,CAChCD,GAAK/R,KAAKmR,MAAMhB,GAAG6B,YACnB,GAAID,KAAO3O,UAAW,CAClB,MAAM,IAAI3C,MAAM8J,IAAIyF,WAAW,aAAcgC,WAAYhS,KAAK2G,QAElEoL,IAAM,OAEL,CACDA,GAAKtS,SAASC,KAAK2K,aAEvB0H,IAAM,GACN/R,KAAKmR,MAAMhB,GAAG8B,IAAMF,GAExB/R,KAAKoR,OAAOW,IAAM,IAAItS,SAASC,KAAKgR,aAAaP,GAErDnQ,KAAKmS,gBAAkB,OAG3BnS,KAAKoS,SAAW,WACZ,IAAIC,gBAAmBlC,EAAG2B,MAE1B,IAAK3B,EAAI,EAAGA,EAAInQ,KAAKmR,MAAMhO,OAAQgN,GAAK,EAAG,CACvC2B,MAAQ9R,KAAKmR,MAAMhB,GACnB,GAAI2B,MAAO,CACPO,aAAa1O,KAAKmO,QAG1B9R,KAAKmR,MAAQkB,aACbrS,KAAK6R,gBAGT7R,KAAKsS,qBAAuB,SAAUC,WAAYC,qBAAsBC,WACpE,IAAIC,gBAAkBH,WAAWvS,KAAK4G,MAAM+L,cAAc,gBACtDC,YACA1B,OACA2B,QACAC,SACAC,IACAC,YACAjB,GACAkB,SACAC,aACAC,gBACAhD,EACAiD,EAEJ,GAAIV,iBAAmBA,gBAAgB1S,KAAK2G,OAAQ,CAEhD,GAAKe,OAAO2L,KAAKrT,KAAKuR,cAAcpO,SAAW,GAAMsP,WAAcA,UAAUtP,SAAW,EAAI,CACxF6P,eACA,IAAKjB,MAAM/R,KAAKuR,aAAc,CAC1B0B,SAAWjT,KAAKsT,UAAUvB,GAAI,OAE9B,GAAIkB,SAAU,CACVF,IAAM/S,KAAKuT,QAAQN,SAASvT,KAAM+S,WAClCO,YAAYD,KAAOE,SAASvT,OAKxC,IAAKyQ,EAAI,EAAGA,EAAIuC,gBAAgB1S,KAAK2G,OAAOxD,OAAQgN,IAAK,CACrDe,OAASwB,gBAAgB1S,KAAK2G,OAAOwJ,GACrCyC,SAAS1B,OAAO,aAAeA,OAE/B,GAAIA,OAAO,mBAAqB,UAAW,CACvC6B,IAAM3P,UAEN,GAAIqP,WAAcA,UAAUtP,SAAW,EAAI,CACvC4P,IAAM/S,KAAKuT,QAAQrC,OAAQuB,WAG/B,GAAIO,YAAa,CACb,GAAIA,YAAYD,OAAS3P,UAAW,CAChC,MAAM,IAAI3C,MAAM8J,IAAIyF,WAAW,gBAIvC,GAAKkD,eAAiB9P,WAAcqP,WAAcA,UAAUtP,SAAW,EAAI,CACvE+P,gBACAC,mBAEA,IAAK,IAAIC,EAAI,EAAGA,EAAIpT,KAAKmR,MAAMhO,OAAQiQ,IAAK,CACxCP,QAAU7S,KAAKmR,MAAMiC,GACrB,IAAKP,QAAS,SAEd,IAAIW,KAAOxT,KAAKuT,QAAQV,QAASJ,WACjCS,aAAaM,MAAQX,QAIzB,IAAKO,EAAI,EAAGA,EAAIpT,KAAK0R,SAASvO,OAAQiQ,IAAK,CACvCP,QAAU7S,KAAK0R,SAAS0B,GAAG1T,KAC3B,IAAKmT,QAAS,SAEd,IAAIW,KAAOxT,KAAKuT,QAAQV,QAASJ,WACjCU,gBAAgBK,MAAQX,SAKhC,GAAIE,MAAQ3P,UAAW,CACnByP,QAAUM,gBAAgBJ,KAC1B,GAAIF,UAAYzP,UAAW,CAEvB,UAIR,GAAI2P,MAAQ3P,UAAW,CACnByP,QAAUK,aAAaH,KACvB,GAAIF,UAAYzP,UAAW,CACvB,IAAI6P,SAAWjT,KAAKsT,UAAUT,QAAQZ,IAAK,OAC3C,GAAIgB,SAAUA,SAASQ,QAAQ,OAC/BvC,OAAOe,IAAMY,QAAQZ,KAI7B,GAAIf,OAAOe,MAAQ7O,UACf8N,OAAOe,IAAMxS,SAASC,KAAK2K,aAC/B,IAAIqJ,QACJ1T,KAAK4G,MAAM+M,YACP3T,KAAK4T,UAAW1C,OAAQwC,MAC5B1T,KAAK4G,MAAMiN,uBAAuBH,MAClC1T,KAAKuR,aAAaL,OAAOe,KAAOyB,KAChC,IAAIT,SAAW,IAAIxT,SAASC,KAAKoU,SAAS9T,KAAM0T,MAChD1T,KAAK0R,SAAS/N,KAAKsP,YAO/B,IAAIc,YAAcxB,WAAWvS,KAAK4G,MAAM+L,cAAc3S,KAAK2G,OAC3D,GAAIoN,YAAa,CACb,IAAK5D,EAAI,EAAGA,EAAIoC,WAAWvS,KAAK4G,MAAM+L,cAAc3S,KAAK2G,OAAOxD,OAAQgN,IAAK,CACzEe,OAASqB,WAAWvS,KAAK4G,MAAM+L,cAAc3S,KAAK2G,OAAOwJ,GACzD2C,SAAW1P,UACX,GAAIoP,sBAAwBtB,OAAO,YAAa,CAC5C4B,SAAWN,qBAAqBtB,OAAO,aAE3C,OAAQA,OAAO,mBACf,IAAK,UACD,GAAI4B,WAAa1P,UAAW,CACxB0P,SAAW5B,OAAOe,IAItB,GAAIa,WAAa1P,UAAW,CACxBpD,KAAKuR,aAAauB,UAAY,KAC9B9S,KAAKwR,OAAO7N,KAAKmP,UAErB,MACJ,IAAK,WACD,IAAIkB,aAAepB,SAAS1B,OAAO,aACnC,GAAI8C,eAAiB5Q,UAAW,CAC5B4Q,gBAGJ,GAAIlB,WAAa1P,UAAW,CACxB0P,SAAW5B,OAAOe,IAGtB,GAAIa,WAAa1P,UAAW,CACxB4Q,aAAa/B,IAAMf,OAAOe,IAE1B,IAAIyB,QACJ1T,KAAK4G,MAAM+M,YACP3T,KAAK4T,UAAWI,aAAcN,MAClC1T,KAAK4G,MAAMiN,uBAAuBH,MAElC1T,KAAKuR,aAAauB,UAAYY,KAC9B1T,KAAKyR,SAASqB,UAAY5B,OAE1BlR,KAAKuR,aAAayC,aAAa/B,KAAOyB,KACtC1T,KAAKyR,SAASuC,aAAa/B,KAAOf,OAEtC,MACJ,KAAK9N,UACD,MACJ,QACI,MAAM,IAAI3C,MAAM8J,IAAIyF,WAAW,aAC3B,sCAAuC,8BAMvD,IAAIiE,YAAc1B,WAAWvS,KAAK4G,MAAM+L,cAAc,gBACtD,GAAIsB,YAAa,CACb,IAAK9D,EAAI,EAAGA,EAAI8D,YAAYjU,KAAK2G,OAAOxD,OAAQgN,IAAK,CACjD,IAAI+D,KAAOD,YAAYjU,KAAK2G,OAAOwJ,GACnC,IAAI2C,SAAWN,qBAAqB0B,KAAK,aACzC,IAAIjB,SAAWjT,KAAKsT,UAAUR,SAAU,OACxC,GAAIG,SAAU,CACVA,SAASvT,KAAKyU,aAAeD,KAAK,iBAK9CtB,SAAW,MAMf5S,KAAKoU,WAAa,WACdpU,KAAKqU,WAAW,MAGhBrU,KAAKmR,SACLnR,KAAKoR,UACLpR,KAAKqR,aACLrR,KAAK6R,eAGL7R,KAAKuR,gBACLvR,KAAKwR,UACLxR,KAAKyR,YACLzR,KAAK0R,aAGT1R,KAAKsU,QAAU,WACX,IAAI5U,KAGJ,GAAIM,KAAK4G,MAAM2N,cAAe,CAC1B7U,KAAOM,KAAKwU,2BAA2BxU,KAAKmR,WAE3C,CACDzR,KAAOM,KAAKyU,kBAGhB,GAAIzU,KAAKsR,gBAAiB,CACtB,IAAK,IAAInB,EAAI,EAAGA,EAAIzQ,KAAKyD,OAAQgN,IAAK,CAClC,IAAI2B,MAAQpS,KAAKyQ,GACjB,IAAK2B,MAAO,CACR,OAAO,OAKnB,OAAOpS,KAAKyD,SAAW,GAK3BnD,KAAK0U,QAAU,SAAUC,QACrB,GAAI3U,KAAKmS,iBAAmBnS,KAAKsR,gBAAiB,CAC9CtR,KAAKoS,WAGT,OAAOpS,KAAK4U,SAASD,SAIzB3U,KAAK4U,SAAW,SAAUD,QACtB,IAAIxE,EACAzQ,KACAmV,eACAxC,aACAP,MACA1M,MAEJ,GAAIpF,KAAKmS,gBAAiB,CACtBnS,KAAKoS,WAGT,GAAIuC,QAAUA,OAAO9R,OAAQ,CACzB,MAAM,IAAIpC,MAAM,2CAGf,GAAIT,KAAK4G,MAAM2N,cAAe,CAC/B7U,KAAOM,KAAKwU,2BAA2BxU,KAAKmR,WAE3C,CACDzR,KAAOM,KAAKyU,kBAGhB,GAAIzU,KAAKsR,gBAAiB,CACtBuD,eAAiB,EACjBxC,gBACA,IAAKlC,EAAI,EAAGA,EAAIzQ,KAAKyD,OAAQgN,GAAK,EAAG,CACjC2B,MAAQpS,KAAKyQ,GACb,GAAI2B,MAAO,CACPO,aAAa1O,KAAKmO,WAEjB,CACD+C,kBAGR,GAAKA,eAAiB,IAAM7U,KAAKmR,MAAMhO,QAAW0G,mCAC9C7J,KAAKmS,gBAAkB,KAE3BzS,KAAO2S,iBAEN,CAID,GAAIsC,SAAWA,OAAOG,MAAQH,OAAOI,KAAM,CACvC1C,gBACA,IAAKlC,EAAI,EAAGA,EAAIzQ,KAAKyD,OAAQgN,GAAK,EAAG,CACjCkC,aAAa1O,KAAKjE,KAAKyQ,IAE3BzQ,KAAO2S,cAIf,GAAIsC,SAAWA,OAAOG,MAAQH,OAAOI,KAAM,CACvC,GAAIJ,OAAOG,KAAM,CAEb,IAAIE,cACJ,IAAK7E,EAAI,EAAGA,EAAIwE,OAAOG,KAAK3R,OAAQgN,GAAK,EAAG,CACxC/K,MAAQuP,OAAOG,KAAK3E,GAAG/K,MACvB,GAAIuP,OAAOG,KAAK3E,GAAG8E,KAAO,OAAQ,CAC9B7P,OAAS,QAEb4P,WAAWrR,KAAKyB,OAIpB,IAAI8P,WAAalV,KAAKmV,mBAAmBH,YACzC,GAAIE,WAAWF,YAAcE,WAAWF,WAAW7R,OAAS,EAAG,CAC3D+R,WAAWjQ,SAAWjF,KACtBN,KAAKoV,KAAK9U,KAAKoV,cAAcF,cAIrC,GAAIP,OAAOI,IAAK,CACZ,UAAWJ,OAAW,MAAK,YAAa,CACpCA,OAAOU,KAAO,EAGlB3V,KAAOA,KAAK4V,OAAOX,OAAOU,KAAMV,OAAOI,MAI/C,OAAOrV,MAGXM,KAAKuV,iBAAmB,SAAUrE,OAAQsE,iBACtC,IAAIC,OAASvE,QACb,IAAIwE,WAAaD,MAEjB,UAAU,iBAAqB,YAAa,CACxCD,gBAAkB,MAEtB,GAAIxV,KAAK4G,MAAM+L,aAAc,CACzB+C,cACAA,WAAW1V,KAAK4G,MAAM+L,iBACtB+C,WAAW1V,KAAK4G,MAAM+L,cAAc3S,KAAK2G,OAAS8O,MAClD,GAAID,iBAAmBxV,KAAK2V,UAAUxS,OAAS,EAAG,CAC9C,IAAI8P,SAAWjT,KAAKsT,UAAUpC,OAAOe,IAAK,OAC1C,GAAIgB,SAAU,CACV,IAAK,IAAI9C,EAAI,EAAGA,EAAInQ,KAAK2V,UAAUxS,OAAQgN,IAAK,CAC5C,IAAIU,UAAY7Q,KAAK2V,UAAUxF,GAC/BuF,WAAW1V,KAAK4G,MAAM+L,cAAc9B,WAChC7Q,KAAK4G,MAAMgP,SAAS/E,WAAW4D,gBAAgBxB,iBAK9D,CACD,GAAIjT,KAAK4G,MAAMiP,cAAe,CAC1BH,cACAA,WAAW1V,KAAK4G,MAAMiP,eAAiBJ,OAG/C,OAAOC,YAGX1V,KAAK8V,mBAAqB,SAAUJ,YAChC,IAAIhW,QACJ,GAAIgW,WAAY,CACZ,GAAI1V,KAAK4G,MAAM+L,aAAc,CACzB,GAAI+C,WAAW1V,KAAK4G,MAAM+L,cACtBjT,KAAOgW,WAAW1V,KAAK4G,MAAM+L,cAAc3S,KAAK2G,WAEnD,CACD,GAAI3G,KAAK4G,MAAMiP,cAAe,CAC1B,GAAIH,WAAW1V,KAAK4G,MAAMiP,eACtBnW,KAAOgW,WAAW1V,KAAK4G,MAAMiP,oBAEhC,GAAIH,WAAWhW,KAAM,CACtBA,KAAOgW,WAAWhW,SAEjB,CACDA,KAAOgW,aAKnB,OAAOhW,gBAAgBqE,MAAQrE,KAAK,GAAKA,MAI7CM,KAAK+V,UAAY,WACb,OAAO/V,KAAK8Q,SAEhB9Q,KAAKgW,UAAY,SAAUC,QACvBjW,KAAK8Q,QAAUmF,QAInBjW,KAAKiH,YAAc,SAAUiP,WACzB,IAAI/F,EAAG8F,OAEPA,OAASjW,KAAK+V,YAEd,IAAK5F,EAAI,EAAGA,EAAI8F,OAAO9S,OAAQgN,IAAK,CAChC,GAAI8F,OAAO9F,GAAG9L,MAAQ6R,UAAW,CAC7B,OAAQD,OAAO9F,GAAGzK,SAI1B,OAAOtC,WAIXpD,KAAKyH,WAAa,SAAUyO,WACxB,IAAI/F,EAAG8F,OAEPA,OAASjW,KAAK+V,YAEd,IAAK5F,EAAI,EAAGA,EAAI8F,OAAO9S,OAAQgN,IAAK,CAChC,GAAI8F,OAAO9F,GAAG9L,MAAQ6R,UAAW,CAC7B,OAAQD,OAAO9F,GAAG5K,QAI1B,OAAOnC,WAKXpD,KAAKmW,IAAM,SAAUvO,QACjB,OAAO5H,KAAKoW,KAAKxO,OAAQ,KAAM,OAInC5H,KAAKqW,OAASrW,KAAKmW,IAEnBnW,KAAKoW,KAAO,SAAUxO,OAAQ0O,aAAcC,kBACxC,UAAU,cAAkB,YAAa,CACrCD,aAAe,KAEnB,UAAU,kBAAsB,YAAa,CACzCC,iBAAmB,KAEvB,IAAIrF,UACAf,EACAiD,EACA3N,MACA+Q,cACAnS,KAEJ,UAAWuD,SAAW,YAAa,CAC/BA,UAIJ,IAAIqO,OAASjW,KAAK+V,YAClB,IAAK5F,EAAI,EAAGA,EAAI8F,OAAO9S,OAAQgN,IAAK,CAChC,IAAI+F,UAAYD,OAAO9F,GAAG9L,KAC1B,GAAI4R,OAAO9F,GAAG7K,MAAQ,QAAS,CAC3B4L,OAAOgF,cACP,GAAID,OAAO9F,GAAGsG,SAAU,CACpB,IAAKrD,EAAI,EAAGA,EAAI6C,OAAO9F,GAAGsG,SAAUrD,IAAK,CACrClC,OAAOgF,WAAW9C,GAAKpT,KAAK4G,MAAM8P,iBAAiBT,OAAO9F,KAKlE1K,MAAQmC,OAAOsO,WACf,UAAWzQ,OAAS,YAAa,CAC7ByL,OAAOgF,WAAazQ,aACbmC,OAAOsO,WAGlBM,cAAgBxW,KAAK4G,MAAM+P,eAAeT,WAC1C,IAAKhF,OAAOgF,WAAY,CACpBhF,OAAOgF,cAEX,IAAK9C,EAAI,EAAGA,EAAI6C,OAAO9F,GAAGsG,SAAUrD,GAAK,EAAG,CACxC/O,KAAOmS,cAAcnS,MAAQ+O,EAAE,GAC/B3N,MAAQmC,OAAOvD,MACf,UAAWoB,OAAS,YAAa,CAC7B,IAAKzF,KAAK6G,QAAQxC,KAAKZ,eAAgB,QAG5BmE,OAAO4O,cAAcnS,MAAQ+O,EAAE,IACtC,UAAW3N,OAAS,UAAYwQ,OAAO9F,GAAGyG,MAAMtR,MAAQ,SAAU,CAC9DG,MAAQzF,KAAK4G,MAAMiQ,aAAapR,MAC5BwQ,OAAO9F,GAAGyG,MAAMtR,KAChB,MAER4L,OAAOgF,WAAW9C,GAAK3N,aAKlC,CACDyL,OAAOgF,WAAalW,KAAK4G,MAAM8P,iBAAiBT,OAAO9F,KAK/D,GAAInQ,KAAK4G,MAAMkQ,kBAAoB9W,KAAK+W,eAAiB/W,KAAKgX,QAAS,CACnE,GAAIhX,KAAK4G,MAAMgP,SAAS5V,KAAKgX,SAAS9F,OAAQ,CAC1C,IAAKkC,EAAI,EAAGA,EAAIpT,KAAK+W,cAAc5T,OAAQiQ,IAAK,CAC5ClC,OAAOlR,KAAK+W,cAAc3D,GAAG6D,gBAC7BjX,KAAK4G,MAAMgP,SAAS5V,KAAKgX,SAAS9F,OAAOxR,KAAKM,KAAK+W,cAAc3D,GAAG8D,uBAIxE,MAAM,IAAIzW,MAAM8J,IAAIyF,WAAW,aAAchQ,KAAKgX,UAG1D,IAAK,IAAIG,KAAKvP,OAAQ,CAClBsJ,OAAOiG,GAAKvP,OAAOuP,GAIvB,IAAIpF,GACJ,IAAIC,WACJ,IAAKA,WAAahS,KAAK4G,MAAMsL,UAAUF,cAAgB5O,UAAW,CAC9D2O,GAAKb,OAAOc,YAEhB,IAAKD,GAAI,CACLA,GAAKtS,SAASC,KAAK2K,iBAElB,CACD0H,IAAM,GAEVA,IAAM,GACNb,OAAOe,IAAMF,GAEb,GAAI/R,KAAKoX,UACFpX,KAAKqX,eACJrX,KAAKsX,UAAYlU,WAAapD,KAAKuX,YAAYvC,aAAe5R,WAAY,CAC9E,GAAIpD,KAAKwX,kBAAmB,CACxBxX,KAAKmR,MAAMxN,KAAKuN,QAChBlR,KAAKyX,YAEJ,CAED,IAAKtH,EAAI,EAAGA,EAAInQ,KAAKmR,MAAMhO,OAAQgN,IAAK,CACpC,GAAInQ,KAAKmR,MAAMhB,KAAO,KAAM,SAC5B,IAAIuH,IAAM1X,KAAKsX,QACXtX,KAAKsX,QAAQpG,OAAQlR,KAAKmR,MAAMhB,IAChCnQ,KAAK2X,eAAezG,OAAQlR,KAAKmR,MAAMhB,IAC3C,GAAIuH,MAAQ,EAAG,MAEnB1X,KAAKmR,MAAMmE,OAAOnF,EAAG,EAAGe,QAE5BlR,KAAK6R,mBAEJ,CACD7R,KAAKmR,MAAMxN,KAAKuN,QAChBlR,KAAKoR,OAAOF,OAAOe,KAAO,IAAIxS,SAASC,KAAKgR,aAAa1Q,KAAKmR,MAAMhO,OAAS,GAGjF,IAAI8P,SAAW,IAAIxT,SAASC,KAAKoU,SAAS9T,KAAMkR,QAGhD,GAAIqF,iBACAvW,KAAKqU,WAAWpB,SAAU,MAE9B,GAAIqD,aAAc,CAEdtW,KAAKuR,aAAaL,OAAOe,KAAO,KAEhCjS,KAAKwR,OAAO7N,KAAKuN,OAAOe,KAE5B,OAAOgB,UAOXjT,KAAKyU,gBAAkB,SAAUxB,UAC7B,IAAIvT,QAEJ,GAAIM,KAAKmR,MAAMhO,SAAW,EAAG,OAAOzD,KAEpC,UAAU,UAAc,YAAa,CACjC,GAAIM,KAAK4G,MAAMkQ,kBAAoB9W,KAAK+W,eAAiB/W,KAAKgX,QAAS,CACnE/D,SAAWjT,KAAK4G,MAAMgP,SAAS5V,KAAKgX,SAAS9F,OAC7C,IAAK+B,SACD,MAAM,IAAIxS,MAAM8J,IAAIyF,WAAW,aAAchQ,KAAKgX,WAG9D,GAAI/D,SAAU,CAEV,IAAK,IAAI9C,EAAI,EAAGA,EAAInQ,KAAKmR,MAAMhO,OAAQgN,IAAK,CACxC,IAAI2B,MAAQ9R,KAAKmR,MAAMhB,GACvB,IAAK2B,MAAO,SAEZ,IAAIhK,MAAQ,MACZ,IAAK,IAAIsL,EAAI,EAAGA,EAAIpT,KAAK+W,cAAc5T,OAAQiQ,IAAK,CAChDtL,MAASmL,SAASvT,KAAKM,KAAK+W,cAAc3D,GAAG8D,kBACzClX,KAAKmR,MAAMhB,GAAGnQ,KAAK+W,cAAc3D,GAAG6D,gBACxC,IAAKnP,MAAO,MAEhB,GAAIA,MACApI,KAAKiE,KAAK3D,KAAKmR,MAAMhB,UAI7BzQ,KAAOM,KAAKmR,MAEhB,OAAOzR,MAcXM,KAAKwU,2BAA6B,SAAU9U,MAIxC,IAAK,IAAIyQ,EAAI,EAAGA,EAAIzQ,KAAKyD,OAAQgN,IAAK,CAClC,IAAIyH,aAAelY,KAAKyQ,GAGxB,GAAInQ,KAAK2V,WAAa3V,KAAK2V,UAAUxS,OAAS,EAAG,CAC7C,IAAK,IAAIiQ,EAAI,EAAGA,EAAIpT,KAAK2V,UAAUxS,OAAQiQ,IAAK,CAC5C,IAAIyE,SAAW7X,KAAK4G,MAAMgP,SAAS5V,KAAK2V,UAAUvC,IAElD,GAAIyE,SAASC,UAAW,CAEpB,IAAK,IAAIC,EAAI,EAAGA,EAAIF,SAAS1G,MAAMhO,OAAQ4U,IAAK,CAC5C,IAAIC,YAAcH,SAAS1G,MAAM4G,GACjC,IAAKC,YAAa,SAElB,IAAIlQ,MAAQ,MACZ,IAAK,IAAImQ,EAAI,EAAGA,EAAIJ,SAASd,cAAc5T,OAAQ8U,IAAK,CACpDnQ,MAAS8P,aAAaC,SAASd,cAAckB,GAAGf,kBAChDc,YAAYH,SAASd,cAAckB,GAAGhB,gBACtC,IAAKnP,MAAO,MAEhB,GAAIA,MAAO,CAEP,IAAK8P,aAAaC,SAASlR,OAAQ,CAC/BiR,aAAaC,SAASlR,UAE1BiR,aAAaC,SAASlR,OAAOhD,KAAKqU,cAQ1C,GAAIH,SAASK,kBAAmB,CAC5BL,SAASrD,2BAA2BoD,aAAaC,SAASlR,YAU9E,OAAOjH,MAIXM,KAAKmY,WAAa,WACd,GAAInY,KAAK4G,MAAMkQ,kBAAoB9W,KAAK+W,eAAiB/W,KAAKgX,QAAS,CACnE,GAAIhX,KAAK4G,MAAMgP,SAAS5V,KAAKgX,SAAS9F,OAAQ,CAE1C,IAAK,IAAIf,EAAI,EAAGA,EAAInQ,KAAKmR,MAAMhO,OAAQgN,IAAK,CACxC,IAAI2B,MAAQ9R,KAAKmR,MAAMhB,GACvB,IAAK2B,MAAO,SAEZ,IAAIhK,MAAQ,MACZ,IAAIoP,gBAAiBD,eACrB,IAAK,IAAI7D,EAAI,EAAGA,EAAIpT,KAAK+W,cAAc5T,OAAQiQ,IAAK,CAChD8D,gBAAkBlX,KAAK+W,cAAc3D,GAAG8D,gBACxCD,eAAiBjX,KAAK+W,cAAc3D,GAAG6D,eACvCnP,MAAS9H,KAAK4G,MAAMgP,SAAS5V,KAAKgX,SAAS9F,OAAOxR,KAAKwX,kBACnDlX,KAAKmR,MAAMhB,GAAG8G,gBAClB,IAAKnP,MAAO,MAEhB,GAAIA,MAAO,CACP,OAAO,IAAIrI,SAASC,KAAKoU,SAAS9T,KAAMA,KAAKmR,MAAMhB,WAK9D,CACD,IAAK,IAAIA,EAAI,EAAGA,EAAInQ,KAAKmR,MAAMhO,OAAQgN,IAAK,CACxC,IAAI2B,MAAQ9R,KAAKmR,MAAMhB,GACvB,IAAK2B,MAAO,SAEZ,OAAO,IAAIrS,SAASC,KAAKoU,SAAS9T,KAAMA,KAAKmR,MAAMhB,KAK3D,OAAO/M,WAGXpD,KAAKqU,WAAa,SAAUpB,SAAUmF,qBAClC,GAAInF,SAAU,CACVjT,KAAKkR,OAAS+B,aAEb,CACDjT,KAAKkR,OAAS9N,UAIlB,GAAIpD,KAAK4G,MAAMkQ,iBAAkB,CAC7BsB,2BAA8B,qBAAyB,WAAcA,oBAErE,GAAIpY,KAAK2V,WAAa3V,KAAK2V,UAAUxS,OAAS,EAAG,CAC7C,IAAK,IAAIgN,EAAI,EAAGA,EAAInQ,KAAK2V,UAAUxS,OAAQgN,IAAK,CAC5C,IAAIkI,WAAarY,KAAK4G,MAAMgP,SAAS5V,KAAK2V,UAAUxF,IACpD,IAAKiI,qBAAuBpY,KAAKkR,QAAUmH,WAAWtB,cAAe,CACjEsB,WAAWhE,WAAWgE,WAAWF,kBAEhC,CACDE,WAAWhE,WAAWjR,UAAWgV,wBAMjD,GAAIpY,KAAK4G,MAAM0R,iBAAkB,CAC7BtY,KAAK4G,MAAMsK,OAASlR,KAAKkR,SAIjClR,KAAKuY,OAAS,SAAU3Q,QACpB,GAAI5H,KAAKkR,OAAQ,CACb,OAAOlR,KAAKkR,OAAOqH,OAAO3Q,aAG1B,MAAM,IAAInH,MAAM8J,IAAIyF,WAAW,aAAchQ,KAAK2G,SAI1D3G,KAAKwY,OAASxY,KAAKuY,OAEnBvY,KAAKyY,OAAS,WACV,GAAIzY,KAAKkR,OAAQ,CACb,OAAOlR,KAAKkR,OAAOuC,QAAQ,WAG3B,MAAM,IAAIhT,MAAM8J,IAAIyF,WAAW,aAAchQ,KAAK2G,SAG1D3G,KAAKyT,QAAU,SAAUiF,eACrB,GAAI1Y,KAAKkR,OAAQ,CACb,OAAOlR,KAAKkR,OAAOuC,QAAQiF,oBAG3B,MAAM,IAAIjY,MAAM8J,IAAIyF,WAAW,aAAchQ,KAAK2G,SAG1D3G,KAAK2Y,MAAQ,WACT,GAAI3Y,KAAKkR,OAAQ,CACb,OAAOlR,KAAKkR,OAAOxR,KAAKuS,SAGxB,OAAO,GAIfjS,KAAK4Y,UAAY,WACb,OAAO5Y,KAAK2R,aAGhB3R,KAAK6Y,eAAiB,WAClB,GAAI7Y,KAAKkR,OAAQ,CACb,OAAOlR,KAAKkR,OAAOxR,KAAKyU,kBAGxB,OAAO,GAGfnU,KAAK8Y,SAAW,SAAU/G,IACtB,OAAO/R,KAAKsT,UAAUvB,GAAI,OAG9B/R,KAAKsT,UAAY,SAAUvB,GAAIwE,kBAC3B,UAAU,kBAAsB,YAAa,CACzCA,iBAAmB,KAEvB,GAAIxE,IAAM/R,KAAKoR,OAAOW,IAAK,CACvB,IAAIb,OAASlR,KAAKmR,MAAMnR,KAAKoR,OAAOW,IAAIhK,OACxC/H,KAAKkR,OAASA,OAAS,IAAKzR,SAASC,KAAKoU,SAAS9T,KAAMkR,QAAW,KACpE,GAAIqF,iBACAvW,KAAKqU,WAAWrU,KAAKkR,QACzB,OAAOlR,KAAKkR,OAGhB,GAAIqF,iBACAvW,KAAKqU,WAAW,MACpB,OAAO,MAMXrU,KAAK+Y,KAAO,SAAUrW,IAClB,UAAU,IAAQ,WAAY,CAC1B,MAAM,IAAIjC,MAAM8J,IAAIyF,WAAW,aAAc,WAEjD,IAAItQ,KAAOM,KAAKyU,kBAEhB,IAAK,IAAItE,EAAI,EAAGA,EAAIzQ,KAAKyD,OAAQgN,IAAK,CAClC,IAAI2B,MAAQpS,KAAKyQ,GACjB,IAAK2B,MAAO,CACR,SAEJ9R,KAAKqU,WAAW,IAAI5U,SAASC,KAAKoU,SAAS9T,KAAMN,KAAKyQ,KACtD,IAAIxO,OAASe,GAAG1C,KAAKkR,QACrB,UAAU,QAAY,UAAW,CAC7B,MAAM,IAAIzQ,MAAM8J,IAAIyF,WAAW,aAAc,WAEjD,GAAIrO,OAAQ,CACR,OAAO3B,KAAKkR,QAIpBlR,KAAKqU,WAAW,MAChB,OAAO,MAMXrU,KAAKgZ,QAAU,SAAUtW,IACrB,UAAU,IAAQ,WAAY,CAC1B,MAAM,IAAIjC,MAAM8J,IAAIyF,WAAW,aAAc,cAEjD,IAAI6E,eAAiB,EACrB,GAAI7U,KAAKmS,gBACLnS,KAAKoS,WAET,IAAI1S,KAAOM,KAAKyU,kBAEhBzU,KAAKiZ,WAAa,KAClB,IAAK,IAAI9I,EAAI,EAAGA,EAAIzQ,KAAKyD,OAAQgN,IAAK,CAClC,IAAI2B,MAAQpS,KAAKyQ,GACjB,IAAK2B,MAAO,CACR+C,iBACA,SAGJ7U,KAAKqU,WAAW,IAAI5U,SAASC,KAAKoU,SAAS9T,KAAMN,KAAKyQ,KACtD,IAAIxO,OAASe,GAAG1C,KAAKkR,QACrB,UAAW,QAAY,cAAiBvP,OACpC,MAGR3B,KAAKiZ,WAAa,MAElB,GAAKpE,eAAiB,IAAM7U,KAAKmR,MAAMhO,QAAW0G,mCAC9C7J,KAAKmS,gBAAkB,MAG/BnS,KAAKkZ,aAAe,SAAUC,KAAMC,KAAM3G,WACtC,IAAIrN,MACJ,IAAI0C,MAAQ,KACZ,IAAK,IAAIqI,EAAI,EAAGA,EAAIsC,UAAUtP,OAAQgN,IAAK,CACvC,IAAI+F,UAAYzD,UAAUtC,GAC1B,IAAIkJ,OAASF,KAAKjD,WAClB,IAAIoD,OAASF,KAAKlD,WAElB,IAAKtF,KAAKC,WAAW0I,cAAe,CAChCnU,MAAQwL,KAAKC,WAAWhK,QAAQqP,UAAUzS,eAC1C,GAAI2B,OAASA,MAAME,MAAQ,SAAU,CACjC,GAAI+T,SAAWjW,WAAaiW,SAAW,KACnCA,OAASA,OAAOG,cACpB,GAAIF,SAAWlW,WAAakW,SAAW,KACnCA,OAASA,OAAOE,eAI5B1R,MAASuR,QAAUC,OACnB,IAAKxR,MAAO,OAAO,MAEvB,OAAO,MAIX9H,KAAKuT,QAAU,SAAUrC,OAAQuB,WAC7B,IAAIgH,aACJ,IAAK,IAAItJ,EAAI,EAAGA,EAAIsC,UAAUtP,OAAQgN,IAAK,CACvC,IAAI+F,UAAYzD,UAAUtC,GAC1B,IAAI1K,MAAQyL,OAAOgF,WAEnB,IAAKtF,KAAKC,WAAW0I,cAAe,CAChC,IAAInU,MAAQwL,KAAKC,WAAWhK,QAAQqP,UAAUzS,eAC9C,GAAI2B,OAASA,MAAME,MAAQ,SAAU,CACjC,GAAIG,QAAUrC,WAAaqC,QAAU,KACjCA,MAAQA,MAAM+T,eAG1BC,UAAUvD,WAAazQ,MAE3B,OAAOjB,KAAKC,UAAUgV,YAG1BzZ,KAAKoV,cAAgB,SAAUF,YAC3B,UAAWA,YAAc,WAAY,CACjC,OAAO,SAAUiE,KAAMC,MACnB,GAAID,OAAS,KAAM,OAAO,EAC1B,GAAIC,OAAS,KAAM,OAAQ,EAE3B,IAAIM,OAAS,IAAIja,SAASC,KAAKoU,SAAS9T,KAAMmZ,MAC9C,IAAIQ,OAAS,IAAIla,SAASC,KAAKoU,SAAS9T,KAAMoZ,MAC9C,OAAOlE,WAAWwE,OAAQC,cAG7B,OAAO,SAAUR,KAAMC,MACxB,IAAInU,SAAWiQ,WAAWjQ,SAC1B,IAAI+P,WAAaE,WAAWF,WAC5B,KAAMA,sBAAsBjR,OAAQ,OAAO,EAC3C,IAAI6V,cAAgB1E,WAAW0E,cAE/B,GAAIT,OAAS,KAAM,OAAO,EAC1B,GAAIC,OAAS,KAAM,OAAQ,EAE3B,IAAIhU,MACJ,IAAK,IAAI+K,EAAI,EAAGA,EAAI6E,WAAW7R,OAAQgN,IAAK,CACxC,IAAI+F,UAAYlB,WAAW7E,GAC3B,IAAIkJ,OAASF,KAAKjD,WAClB,IAAIoD,OAASF,KAAKlD,WAElB,IAAKjR,SAASsU,cAAe,CACzBnU,MAAQH,SAAS4B,QAAQqP,UAAUzS,eACnC,GAAI2B,OAASA,MAAME,MAAQ,SAAU,CACjC,GAAI+T,SAAWjW,WAAaiW,SAAW,KACnCA,OAASA,OAAOG,cACpB,GAAIF,SAAWlW,WAAakW,SAAW,KACnCA,OAASA,OAAOE,eAG5B,GAAIH,OAASC,SAAWD,SAAWjW,WAAaiW,SAAW,MACvD,OAAOO,cAAczJ,GAAK,GAAK,OAC9B,GAAIkJ,OAASC,QAAWA,SAAWlW,WAAakW,SAAW,KAC5D,OAAOM,cAAczJ,IAAM,EAAI,EAEvC,OAAO,IAIfnQ,KAAKuX,eACLvX,KAAKuX,YAAYtS,SAAWjF,KAC5BA,KAAKuX,YAAYvC,WAAa5R,UAC9BpD,KAAKuX,YAAYqC,cAAgBxW,UACjCpD,KAAK2X,eAAiB3X,KAAKoV,cAAcpV,KAAKuX,aAG9CvX,KAAKqX,aAAe,KAEpBrX,KAAKwX,kBAAoB,MACzBxX,KAAKsX,QAAUlU,UACf,UAAYsE,OAAOmS,gBAAmB,WAAY,CAC9C7Z,KAAK8Z,UAAY,KACjBpS,OAAOmS,eACH7Z,KACA,YAEI+Z,IAAK,WACD,OAAO/Z,KAAK8Z,WAEhBE,IAAK,SAAUvU,OACX,GAAIA,MAAO,CACPzF,KAAK8Z,UAAY,KACjB,GAAI9Z,KAAKsX,SAAWtX,KAAKuX,YAAYvC,WAAY,CAC7ChV,KAAKyX,QACLzX,KAAK6R,qBAIT7R,KAAK8Z,UAAY,OAEzBG,WAAY,KACZC,UAAW,OAEnBla,KAAKma,eAAiB,MACtBzS,OAAOmS,eACH7Z,KACA,iBAEI+Z,IAAK,WACD,OAAO/Z,KAAKma,gBAEhBH,IAAK,SAAUvU,OACX,GAAIA,MAAO,CACPzF,KAAKma,eAAiB,UAGtBna,KAAKma,eAAiB,MAC1B,GAAIna,KAAKoX,WACJpX,KAAKuX,YAAYvC,aAAehV,KAAKsX,SAAU,CAChDtX,KAAKyX,QACLzX,KAAK6R,iBAGboI,WAAY,KACZC,UAAW,WAGlB,CACDla,KAAKoX,SAAW,KAChBpX,KAAKuZ,cAAgB,MAGzBvZ,KAAKmV,mBAAqB,SAAUH,YAChC,IAAIE,cACJ,GAAIF,sBAAsBjR,MAAO,CAC7BmR,WAAWF,WAAaA,WACxBE,WAAW0E,iBACX1E,WAAWkF,UACX,IAAK,IAAIjK,EAAI,EAAGA,EAAI+E,WAAWF,WAAW7R,OAAQgN,IAAK,CACnD,IAAIhL,IACJ,IAAI+Q,UACJ,IAAI9Q,MAEJ,UAAY8P,WAAWF,WAAW7E,IAAO,SAAU,CAC/C,MAAM,IAAI1P,MAAM8J,IAAIyF,WAAW,aAAc,kBAAmB,mBAEpE,IAAK7K,IAAM+P,WAAWF,WAAW7E,GAAGkK,QAAQ,QAAU,EAAG,CACrDnE,UAAYhB,WAAWF,WAAW7E,GAAGhI,UAAU,EAAGhD,KAClD,IAAImV,UAAYpF,WAAWF,WAAW7E,GAAGhI,UAAUhD,IAAM,GACzD,OAAQmV,UAAUd,eAClB,IAAK,YACL,IAAK,MACDtE,WAAW0E,cAAczJ,GAAK,KAC9B,MACJ,IAAK,aACL,IAAK,OACD+E,WAAW0E,cAAczJ,GAAK,MAC9B,MACJ,QACI,MAAM,IAAI1P,MAAM8J,IAAIyF,WAAW,aAC3B,eAAiBkF,WAAWF,WAAW7E,GAAGhI,UAAUhD,IAAM,GAAK,IAC/D,iCAGP,CACD+Q,UAAYhB,WAAWF,WAAW7E,GAClC+E,WAAW0E,cAAczJ,GAAK,KAElC,GAAI+F,WAAa,OAASlW,KAAK6G,QAAS,CACpCzB,MAAQpF,KAAK6G,QAAQqP,UAAUzS,eAC/B,GAAI2B,MAAO,CACP,GAAIA,MAAME,MAAQ,QACd,MAAM,IAAI7E,MAAM8J,IAAIyF,WAAW,aAAc,0BACzC,iBACRkG,UAAY9Q,MAAMf,UAGlB,MAAM,IAAI5D,MAAM8J,IAAIyF,WAAW,aAAckG,YAErDhB,WAAWF,WAAW7E,GAAK+F,UAC3BhB,WAAWkF,OAAOlE,WAAaA,eAGlC,CACDhB,WAAWF,WAAa5R,UACxB8R,WAAW0E,cAAgBxW,UAC3B8R,WAAWkF,OAAShX,UAExB,OAAO8R,YAGXlV,KAAKua,cAAgB,SAAUvF,YAC3B,GAAIA,aAAe5R,WAAa4R,aAAe,KAAM,CACjDhV,KAAKuX,YAAYvC,WAAa5R,UAC9BpD,KAAKuX,YAAYqC,cAAgBxW,eAEhC,GAAI4R,sBAAsBjR,MAAO,CAClC,IAAImR,WAAalV,KAAKmV,mBAAmBH,YACzChV,KAAKuX,YAAYvC,WAAaE,WAAWF,WACzChV,KAAKuX,YAAYqC,cAAgB1E,WAAW0E,cAC5C5Z,KAAKuX,YAAY6C,OAASlF,WAAWkF,OAErC,GAAIpa,KAAKoX,SAAU,CACfpX,KAAKyX,QACLzX,KAAK6R,qBAIT,MAAM,IAAIpR,MAAM8J,IAAIyF,WAAW,aAAc,OAAQ,qBAG7DhQ,KAAKwa,UAAY,SAAU9X,IAIvB,GAAIA,WAAa,IAAQ,WAAY,CACjC,MAAM,IAAIjC,MAAM8J,IAAIyF,WAAW,aAAc,2BACzC,uBAERhQ,KAAKsX,QAAU5U,GAAK1C,KAAKoV,cAAc1S,IAAMU,UAC7C,GAAIpD,KAAKoX,SAAU,CACfpX,KAAKyX,QACLzX,KAAK6R,iBAIb7R,KAAK8U,KAAO,SAAU7T,MAClB,GAAIA,OAASmC,WAAanC,OAAS,KAAM,CACrC,MAAM,IAAIR,MAAM8J,IAAIyF,WAAW,aAAc,OAAQ,WAEzD,GAAI5O,UAAU+B,SAAW,KAClBlC,gBAAgB8C,eAAgB,MAAU,WAAa,CAC1D,MAAM,IAAItD,MAAM8J,IAAIyF,WAAW,aAAc,OAAQ,WAGzD,GAAI/O,gBAAgB8C,MAAO,CACvB,IAAImR,WAAalV,KAAKmV,mBAAmBlU,MACzC,GAAIiU,WAAWF,YAAcE,WAAWF,WAAW7R,OAAS,EACxDnD,KAAKyX,MAAMvC,gBAEd,CACDlV,KAAKyX,MAAMxW,MAEfjB,KAAK6R,gBAGT7R,KAAKyX,MAAQ,SAAUxW,MACnB,GAAIG,UAAU+B,SAAW,KACnBnD,KAAKoX,UAAapX,KAAKsX,UAAYlU,WAAapD,KAAKuX,YAAYvC,aAAe5R,WAClF,OAEJ,GAAIhC,UAAU+B,SAAW,EAAG,CACxB,GAAInD,KAAKsX,QAAS,CAEdtX,KAAKmR,MAAM2D,KAAK9U,KAAKsX,aAEpB,CAEDtX,KAAKmR,MAAM2D,KAAK9U,KAAK2X,gBAEzB3X,KAAKwX,kBAAoB,UAExB,CACD,UAAU,MAAU,WAAY,CAE5BxX,KAAKmR,MAAM2D,KAAK9U,KAAKoV,cAAcnU,WAElC,CAEDA,KAAKgE,SAAWjF,KAChBA,KAAKmR,MAAM2D,KAAK9U,KAAKoV,cAAcnU,OAEvC,GAAIjB,KAAKoX,SACLpX,KAAKwX,kBAAoB,OAOrCxX,KAAKya,WAAa,SAAUlI,WAAYmI,QAASjI,UAAW6D,aAAcqE,UACtE3a,KAAK4G,MAAMgU,YAAY5a,KAAK2G,MAAO4L,WAAYmI,QAASjI,UAAW6D,aAAcqE,WAMrF3a,KAAK6a,cAAgB,WACjB,IAAI5V,SAAWjF,KAIf,IAAK,IAAI+R,MAAM9M,SAASsM,aAAc,CAElC,GAAItM,SAASsM,aAAaQ,MAAQ,KAAM,CACpC,IAAIkB,SAAWhO,SAASqO,UAAUvB,GAAI,OACtC,GAAIkB,WAAa,KAAM,CACnBhO,SAAS2B,MAAMiN,uBAAuBZ,SAASvT,KAAM,YAKxD,GAAIM,KAAKyR,SAASM,MAAQ3O,UAAW,CACtC,IAAI6P,SAAWjT,KAAKsT,UAAUvB,GAAI,OAClC,GAAIkB,WAAa,KAAM,CACnBhO,SAAS2B,MAAMiN,uBAAuBZ,SAASvT,KAAM,QAKjEuF,SAAS+L,cACT/L,SAASuM,UACTvM,SAASwM,YACTxM,SAASyM,YACTzM,SAASsM,iBAMbvR,KAAK8a,cAAgB,WAEjB,IAAK,IAAI/I,MAAM/R,KAAKuR,aAAc,CAC9B,GAAIvR,KAAKuR,aAAaQ,MAAQ,KAAM,CAEhC/R,KAAK4G,MAAMmU,YAAY/a,KAAM+R,SAE5B,GAAI/R,KAAKyR,SAASM,MAAQ3O,UAAW,CAEtCpD,KAAK4G,MAAMoU,YAAYhb,KAAM+R,GAAI,UAEhC,CAED/R,KAAK4G,MAAMqU,YAAYjb,KAAM+R,GAAI,OAIzC,IAAI9M,SAAWjF,KACfiF,SAAS+L,cACT/L,SAASuM,UACTvM,SAASwM,YACTxM,SAASyM,aAGb1R,KAAKkb,WAAa,WACd,OAAQxT,OAAO2L,KAAKrT,KAAKuR,cAAcpO,SAAW,GAGtDnD,KAAKmb,WAAa,WACd,IAAIxZ,UACJ,IAAK,IAAIoQ,MAAM/R,KAAKuR,aAAc,CAC9B,IAAI2C,MAAQkH,SAAU,GAAIlK,OAAQ,MAElC,GAAIlR,KAAKuR,aAAaQ,MAAQ,KAAM,CAChCmC,KAAKkH,SAAWrR,+BAA+BtK,SAASC,KAAKqC,KAAKsZ,YAClEnH,KAAKhD,OAASlR,KAAKsT,UAAUvB,GAAI,YAGhC,GAAI/R,KAAKyR,SAASM,MAAQ3O,UAAW,CACtC8Q,KAAKkH,SAAWrR,+BAA+BtK,SAASC,KAAKqC,KAAKuZ,YAClEpH,KAAKhD,OAASlR,KAAKsT,UAAUvB,GAAI,WAGhC,CACDmC,KAAKkH,SAAWrR,+BAA+BtK,SAASC,KAAKqC,KAAKwZ,YAClErH,KAAKhD,OAAS,IAAIzR,SAASC,KAAKoU,SAAS9T,KAAMA,KAAKuR,aAAaQ,KAErEpQ,OAAOgC,KAAKuQ,MAEhB,OAAOvS,QASX3B,KAAKwb,mBAAqB,WACtB,IAAItK,OAAS,KAEb,IAAK,IAAIa,MAAM/R,KAAKuR,aAAc,CAE9B,GAAIvR,KAAKuR,aAAaQ,MAAQ,KAAM,CAChCb,OAASlR,KAAKsT,UAAUvB,GAAI,OAC5B,GAAIb,OAAQ,QACDA,OAAOxR,KAAKyU,kBAGtB,CAEDjD,OAASlR,KAAKsT,UAAUvB,GAAI,OAC5B,GAAIb,OAAQ,QACDA,OAAOxR,KAAKyU,iBAElB,QAEMnU,KAAKuR,aAAaQ,IAAIoC,iBAW7CnU,KAAKyb,cAAgB,WACjB,IAAItL,EAEJ,IAAK,IAAI4B,MAAM/R,KAAKuR,aAAc,CAE9B,GAAIvR,KAAKuR,aAAaQ,MAAQ,KAAM,CAChC,IAAIkB,SAAWjT,KAAKsT,UAAUvB,GAAI,OAGlC,GAAIkB,WAAa,MACVjT,KAAK4G,MAAMsL,UAAUF,aAAe5O,UAAW,CAClD,GAAIpD,KAAKqR,UAAUU,IAAK,CACpB,IAAIb,OAASlR,KAAKmR,MAAMnR,KAAKqR,UAAUU,IAAIhK,OAC3CkL,SAAW/B,OAAS,IAAKzR,SAASC,KAAKoU,SAAS9T,KAAMkR,QAAW,YAC1DlR,KAAKqR,UAAUU,KAI9B,GAAIkB,WAAa,KAAM,CACnB,GAAIA,SAASvT,KAAKgc,WACVzI,SAASvT,KAAKyU,eAAiB/Q,UAAY,CAC/CpD,KAAK4G,MAAMmU,YAAY/a,KAAM+R,QAE5B,CACDkB,SAAS0I,wBAGZ,CAGD,IAAIC,MAAQ,MACZ,IAAK,IAAIzL,EAAI,EAAGA,EAAInQ,KAAK0R,SAASvO,OAAQgN,IAAK,CAC3CyL,MAAS5b,KAAK0R,SAASvB,GAAGzQ,KAAKuS,KAAOF,GACtC,GAAI6J,MAAO,MAEf,IAAKA,MAAO,CACR,MAAM,IAAInb,MAAM8J,IAAIyF,WAAW,aAC3B,4EAKX,GAAIhQ,KAAKyR,SAASM,MAAQ3O,UAAW,CACtC,IAAI6P,SAAWjT,KAAKsT,UAAUvB,GAAI,OAClC,GAAIkB,WAAa,KAAM,CAEnB,GAAIA,SAASvT,KAAKgc,WACVzI,SAASvT,KAAKyU,eAAiB/Q,UAAY,CAC/CpD,KAAK4G,MAAMoU,YAAYhb,KAAM+R,QAE5B,CACDkB,SAAS0I,wBAGZ,CAGD,GAAI3b,KAAKuR,aAAaQ,IAAI2J,WAClB1b,KAAKuR,aAAaQ,IAAIoC,eAAiB/Q,UAAY,CACvDpD,KAAK4G,MAAMqU,YAAYjb,KAAM+R,QAE5B,CACD,IAAI6J,MAAQ,MACZ,IAAKzL,EAAI,EAAGA,EAAInQ,KAAK0R,SAASvO,OAAQgN,IAAK,CACvCyL,MAAS5b,KAAK0R,SAASvB,GAAGzQ,KAAKuS,KAAOF,GACtC,GAAI6J,MAAO,MAEf,IAAKA,MAAO,CACR,MAAM,IAAInb,MAAM8J,IAAIyF,WAAW,aAC3B,4EAMf,CACD,GAAIhQ,KAAKuR,aAAaQ,IAAI2J,WAClB1b,KAAKuR,aAAaQ,IAAIoC,eAAiB/Q,UAAY,CACvDpD,KAAK4G,MAAMqU,YAAYjb,KAAM+R,MAKzC,IAAI9M,SAAWjF,KACfiF,SAAS+L,cACT/L,SAASuM,UACTvM,SAASwM,YACTxM,SAASyM,YACTzM,SAASsM,iBAObvR,KAAK2b,iBAAmB,WACpB,GAAI3b,KAAKkR,OACL,OAAOlR,KAAKkR,OAAOyK,mBACvB,MAAM,IAAIlb,MAAM8J,IAAIyF,WAAW,aAAchQ,KAAK2G,SAMtD3G,KAAK6b,iBAAmB,WACpB,GAAI7b,KAAKkR,OACL,OAAOlR,KAAKkR,OAAO2K,mBACvB,MAAM,IAAIpb,MAAM8J,IAAIyF,WAAW,aAAchQ,KAAK2G,SAQtD3G,KAAKkY,gBAAkB,WACnB,IAAI4D,eAAiB,MACrB,IAAIC,YAGJ,GAAI/b,KAAK2V,UAAUxS,OAAS,EAAG,CAC3B,IAAK,IAAIgN,EAAI,EAAGA,EAAInQ,KAAK2V,UAAUxS,OAAQgN,IAAK,CAC5C4L,YAAc/b,KAAK4G,MAAMgP,SAAS5V,KAAK2V,UAAUxF,IAEjD,GAAI4L,YAAYjE,UAAW,CACvBgE,eAAiB,KACjB,QAKZ,OAAOA,iBASfrc,SAASC,KAAKoU,SAAW,SAASA,SAAS7O,SAAUiM,QACjDlR,KAAK4T,UAAY3O,SACjBjF,KAAKN,KAAOwR,OAEZlR,KAAK2Y,MAAQ,WACT,OAAO3Y,KAAKN,KAAKuS,IAAMjS,KAAKN,KAAKuS,IAAM,MAG3CjS,KAAK6Y,eAAiB,WAClB,OAAO7Y,KAAKN,KAAKyU,cAMrBnU,KAAKgc,uBAAyB,WAE1B,GAAIhc,KAAK4T,UAAUrC,aAAavR,KAAKN,KAAKuS,OAAS7O,UAAW,CAE1D,IAAIsQ,QACJ1T,KAAK4T,UAAUhN,MAAM+M,YACjB3T,KAAK4T,UAAW5T,KAAKN,KAAMgU,MAC/B1T,KAAK4T,UAAUrC,aAAavR,KAAKN,KAAKuS,KAAOyB,KAGjD,GAAI1T,KAAK4T,UAAUnC,SAASzR,KAAKN,KAAKuS,OAAS7O,UAAW,CACtDpD,KAAK4T,UAAUnC,SAASzR,KAAKN,KAAKuS,KAAOjS,KAAKN,OAQtDM,KAAKic,YAAc,SAAU7B,QACzB,IAAIrS,MAAQ/H,KAAK4T,UAAUxC,OAAOpR,KAAKN,KAAKuS,KAAKlK,MACjD,IAAImJ,OAASlR,KAAK4T,UAAUzC,MAAMpJ,OAElC,GAAI/H,KAAK4T,UAAUwD,UACZpX,KAAK4T,UAAUyD,eACdrX,KAAK4T,UAAU0D,UAAYlU,WACxBpD,KAAK4T,UAAU2D,YAAYvC,aAAe5R,WAAY,CAE7D,GAAIpD,KAAK4T,UAAU2D,YAAY6C,OAAQ,CACnC,UAAWA,QAAU,SAAU,CAC3B,GAAIpa,KAAK4T,UAAU2D,YAAY6C,OAAOA,UAAYhX,UAC9C,YAEH,GAAIgX,kBAAkBrW,MAAO,CAC9B,IAAI6X,MAAQ,MACZ,IAAK,IAAIzL,EAAI,EAAGA,EAAIiK,OAAOjX,OAAQgN,IAAK,CACpC,GAAInQ,KAAK4T,UAAU2D,YAAY6C,OAAOA,OAAOjK,MAAQ/M,UAAW,CAC5DwY,MAAQ,KACR,OAGR,IAAKA,MACD,QAIZ,GAAI5b,KAAK4T,UAAU4D,kBAAmB,CAClCxX,KAAK4T,UAAU6D,QACfzX,KAAK4T,UAAU/B,mBAEd,CAED,IAAK,IAAI1B,EAAI,EAAGA,EAAInQ,KAAK4T,UAAUzC,MAAMhO,OAAQgN,IAAK,CAClD,GAAInQ,KAAK4T,UAAUzC,MAAMhB,KAAO,KAAM,SACtC,GAAIA,GAAKpI,MAAO,SAChB,IAAI2P,IAAM1X,KAAK4T,UAAU0D,QACrBtX,KAAK4T,UAAU0D,QAAQpG,OAAQlR,KAAK4T,UAAUzC,MAAMhB,IACpDnQ,KAAK4T,UAAU+D,eAAezG,OAAQlR,KAAK4T,UAAUzC,MAAMhB,IAC/D,GAAIuH,MAAQ,EAAG,MAGnB,GAAIvH,EAAIpI,MAAO,CACXoI,IAEJ,GAAIA,GAAKpI,MAAO,CACZ/H,KAAK4T,UAAUzC,MAAMmE,OAAOvN,MAAO,GACnC/H,KAAK4T,UAAUzC,MAAMmE,OAAOnF,EAAG,EAAGe,QAClClR,KAAK4T,UAAU/B,mBAU/B7R,KAAKuY,OAAS,SAAUrH,QACpB,GAAIA,SAAW9N,UACX,MAAM,IAAI3C,MAAM8J,IAAIyF,WAAW,aAAc,OAAQ,yBAEzDhQ,KAAKgc,yBAEL,IAAI9F,UACA/F,EACAiD,EACA3N,MACAwQ,OAASjW,KAAK4T,UAAUmC,YACxBS,cACAnS,KAEJ,GAAI6M,OAAQ,CACR,IAAKf,EAAI,EAAGA,EAAI8F,OAAO9S,OAAQgN,GAAK,EAAG,CACnC+F,UAAYD,OAAO9F,GAAG9L,KACtBoB,MAAQyL,OAAOgF,WACf,UAAWzQ,OAAS,YAAa,CAC7B,UAAWA,OAAS,UAAYwQ,OAAO9F,GAAG7K,MAAQ,SAAU,CACxDG,MAAQzF,KAAK4T,UAAUhN,MAAMiQ,aAAapR,MACtCwQ,OAAO9F,GAAG7K,KACV2Q,OAAO9F,GAAGyG,MAAQX,OAAO9F,GAAGyG,MAAMtR,KAAO,MAEjDtF,KAAKN,KAAKwW,WAAazQ,MAE3B,GAAIwQ,OAAO9F,GAAG7K,OAAS,QAAS,CAE5BkR,cAAgBxW,KAAK4T,UAAUhN,MAAM+P,eAAeT,WACpD,IAAKlW,KAAKN,KAAKwW,WAAY,CACvBlW,KAAKN,KAAKwW,cAEd,IAAK9C,EAAI,EAAGA,EAAI6C,OAAO9F,GAAGsG,SAAUrD,GAAK,EAAG,CACxC/O,KAAOmS,cAAcnS,MAAQ+O,EAAE,GAC/B3N,MAAQyL,OAAO7M,MACf,UAAWoB,OAAS,YAAa,CAE7B,IAAKzF,KAAK4T,UAAU/M,QAAQxC,KAAKZ,eAAgB,CAC7C,UAAWgC,OAAS,UAAYwQ,OAAO9F,GAAGyG,MAAMtR,MAAQ,SAAU,CAC9DG,MAAQzF,KAAK4T,UAAUhN,MAAMiQ,aAAapR,MACtCwQ,OAAO9F,GAAGyG,MAAMtR,KAChB,MAERtF,KAAKN,KAAKwW,WAAW9C,GAAK3N,UAO9CzF,KAAKic,cAET,OAAO,MAIXjc,KAAKwY,OAASxY,KAAKuY,OAKnBvY,KAAKyY,OAAS,WACV,OAAOzY,KAAKyT,QAAQ,OAGxBzT,KAAKyT,QAAU,SAAUiF,eACrB,UAAU,eAAmB,YAAa,CACtCA,cAAgB,KAGpB,IAAI3Q,MAAQ/H,KAAK4T,UAAUxC,OAAOpR,KAAKN,KAAKuS,KAAKlK,MACjD,IAAIkL,SAAWjT,KAAK4T,UAAUN,UAAUtT,KAAKN,KAAKuS,IAAK,OAEvD,GAAIyG,cAAe,CAEf,IAAIxH,OAASlR,KAAK4T,UAAUrC,aAAavR,KAAKN,KAAKuS,KACnD,GAAIf,SAAW9N,UAAW,CAEtBpD,KAAKN,KAAK0R,OAASrJ,MACnB/H,KAAK4T,UAAUrC,aAAavR,KAAKN,KAAKuS,KAAOjS,KAAKN,SAEjD,CAED,GAAIwR,OAAQ,CAKRA,OAAOE,OAASrJ,OAIxB/H,KAAK4T,UAAUlC,SAAS/N,KAAKsP,UAIjCjT,KAAK4T,UAAUzC,MAAMpJ,OAAS,KAC9B/H,KAAK4T,UAAUtC,gBAAkB,YAC1BtR,KAAK4T,UAAUxC,OAAOpR,KAAKN,KAAKuS,KAGvCjS,KAAK4T,UAAUS,WAAW,MAE1B,OAAO,MAMXrU,KAAK2b,iBAAmB,WACpB,IAAI5J,GAAK/R,KAAKN,KAAKuS,IACnB,GAAIjS,KAAK4T,UAAUrC,aAAaQ,MAAQ3O,UAAW,CAC/C,GAAIpD,KAAKN,KAAKgc,UAAW,CACrB,MAAM,IAAIjb,MAAM8J,IAAIyF,WAAW,eAEnC,GAAIhQ,KAAK4T,UAAUrC,aAAaQ,MAAQ,KAAM,CAG1C,IAAK,IAAI5B,EAAI,EAAGA,EAAInQ,KAAK4T,UAAUpC,OAAOrO,OAAQgN,IAAK,CACnD,GAAInQ,KAAK4T,UAAUpC,OAAOrB,IAAM4B,GAAI,CAChC/R,KAAK4T,UAAUpC,OAAO8D,OAAOnF,EAAG,GAChC,OAGRnQ,KAAK4T,UAAUhN,MAAMiN,uBAAuB7T,KAAKN,KAAM,WAEtD,GAAIM,KAAK4T,UAAUnC,SAASM,MAAQ3O,UAAW,QAEzCpD,KAAK4T,UAAUnC,SAASM,IAC/B/R,KAAK4T,UAAUhN,MAAMiN,uBAAuB7T,KAAKN,KAAM,UAEtD,CAGD,IAAK,IAAIyQ,EAAI,EAAGA,EAAInQ,KAAK4T,UAAUlC,SAASvO,OAAQgN,IAAK,CACrD,GAAInQ,KAAK4T,UAAUlC,SAASvB,GAAGzQ,KAAKuS,KAAOF,GAAI,CAC3C/R,KAAK4T,UAAUlC,SAAS4D,OAAOnF,EAAG,GAClC,eAILlL,SAASsM,aAAaQ,MAOrC/R,KAAK6b,iBAAmB,WACpB,IAAI9J,GAAK/R,KAAKN,KAAKuS,IACnB,GAAIjS,KAAK4T,UAAUrC,aAAaQ,MAAQ3O,UAAW,CAC/C,GAAIpD,KAAK4T,UAAUrC,aAAaQ,MAAQ,KAAM,CAE1C/R,KAAK4T,UAAUhN,MAAMmU,YAAY/a,KAAK4T,UAAW7B,IAEjD,IAAK,IAAI5B,EAAI,EAAGA,EAAInQ,KAAK4T,UAAUpC,OAAOrO,OAAQgN,IAAK,CACnD,GAAInQ,KAAK4T,UAAUpC,OAAOrB,IAAM4B,GAAI,CAChC/R,KAAK4T,UAAUpC,OAAO8D,OAAOnF,EAAG,GAChC,aAIP,GAAInQ,KAAK4T,UAAUnC,SAASM,MAAQ3O,UAAW,CAEhDpD,KAAK4T,UAAUhN,MAAMoU,YAAYhb,KAAK4T,UAAW7B,GAAI,aAC9C/R,KAAK4T,UAAUnC,SAASM,QAE9B,CAED/R,KAAK4T,UAAUhN,MAAMqU,YAAYjb,KAAK4T,UAAW7B,GAAI,MAErD,IAAK,IAAI5B,EAAI,EAAGA,EAAInQ,KAAK4T,UAAUlC,SAASvO,OAAQgN,IAAK,CACrD,GAAInQ,KAAK4T,UAAUlC,SAASvB,GAAGzQ,KAAKuS,KAAOF,GAAI,CAC3C/R,KAAK4T,UAAUlC,SAAS4D,OAAOnF,EAAG,GAClC,eAILlL,SAASsM,aAAaQ,OAYzCtS,SAASC,KAAKqC,KAAO,SAASA,KAAKma,iBAAkBC,aACjD,IAAIC,UAEJ,UAAW3c,SAASC,KAAK2c,SAAW,YAAa,CAC7C,MAAM,IAAI5b,MAAM,+CAGpB2b,OAAO/Y,UAAYrD,KAAKqD,UAGxBrD,KAAKqD,UAAY,SAASJ,KACtB,IAAID,KAAOe,MAAM7D,UAAU8D,MAAMC,KAAK7C,WACtC,UAAW6B,MAAQ,SAAU,CAEzB,OAAOA,IAAIQ,eACX,IAAK,aACDT,KAAK,GAAK,aACV,MACJ,IAAK,YACDA,KAAK,GAAK,YACV,OAGRoZ,OAAO/Y,UAAUrC,MAAMhB,KAAMgD,OAGjChD,KAAKsc,gBAAkB,SAAUzL,UAAWqF,WACxCxO,OAAOmS,eACH7Z,KAAK4V,SAAS/E,WACdqF,WAEI6D,IAAK,SAASwC,QACV,IAAIlY,KACA0D,MACAyU,QACAnX,UACJ,GAAIrF,KAAKkR,OAAQ,CACbnJ,MAAQmO,UAAUmE,QAAQ5a,SAASC,KAAKqC,KAAK0a,uBAC7C,GAAI1U,MAAQ,IAAM/H,KAAK6G,QAAQqP,UAAUzS,eAAgB,CAIrDY,KAAO6R,UAAU/N,UAAU,EAAGJ,OAC9ByU,QAAUtG,UAAU/N,UAAUJ,MAAQtI,SAASC,KAAKqC,KAAK0a,sBAAsBtZ,QAC/EkC,UAAYrF,KAAK6G,QAAQxC,KAAKZ,eAC9B,IAAKiZ,MAAMF,UAAYnX,WAAcA,UAAUC,OAAS,QAAU,CAC9D,OAAOtF,KAAKkR,OAAOxR,KAAK2E,MAAMmY,QAAU,IAGhD,OAAOxc,KAAKkR,OAAOxR,KAAKwW,gBAGxB,OAAO,MAEf8D,IAAK,SAAUvU,OACX,IAAIpB,KAAO6R,UACPnO,MACAyU,QACAnX,UACJ,GAAIrF,KAAKkR,OAAQ,CACblR,KAAKkR,OAAO8K,yBAEZ,IACIjU,MAAQmO,UAAUmE,QAAQ5a,SAASC,KAAKqC,KAAK0a,uBAC7C,GAAI1U,MAAQ,IAAM/H,KAAK6G,QAAQqP,UAAUzS,eAAgB,CAErDY,KAAO6R,UAAU/N,UAAU,EAAGJ,OAC9ByU,QAAUtG,UAAU/N,UAAUJ,MAAQtI,SAASC,KAAKqC,KAAK0a,sBAAsBtZ,QAC/EkC,UAAYrF,KAAK6G,QAAQxC,KAAKZ,eAC9B,IAAKiZ,MAAMF,UAAYnX,WAAcA,UAAUC,OAAS,QAAU,CAC9DtF,KAAKkR,OAAOxR,KAAK2E,MAAMmY,QAAU,GAAK/W,MACtC,QAGRzF,KAAKkR,OAAOxR,KAAKwW,WAAazQ,MAElC,QACIzF,KAAKkR,OAAO+K,YAAY5X,SAIpC4V,WAAY,KACZC,UAAW,QAIvBxS,OAAOmS,eACH7Z,KACA,sBAEI+Z,IAAK,WACD,OAAO/Z,KAAK2c,qBAEhB1C,WAAY,OAIpBvS,OAAOmS,eACH7Z,KACA,oBAEI+Z,IAAK,WACD,OAAO/Z,KAAK4c,mBAEhB3C,WAAY,OAIpBvS,OAAOmS,eACH7Z,KACA,mBAEI+Z,IAAK,WACD,OAAO/Z,KAAKsY,kBAEhB2B,WAAY,OAKpBja,KAAK4V,YACL5V,KAAK6c,YAAc,EACnB7c,KAAKsY,iBAAmB,KAExBtY,KAAK8c,OAAS,KACd9c,KAAK6V,cAAgB,KACrB7V,KAAK2S,aAAe,KACpB3S,KAAK+c,cACL/c,KAAK8W,iBAAmB,KAExB9W,KAAKgd,SAAW,KAChBhd,KAAKmS,gBAAkB,MAEvBnS,KAAK4c,kBAAoB,MACzB5c,KAAK2c,oBAAsB,MAC3B3c,KAAKid,WAAa,MAElBjd,KAAKkd,iBAAmB,KACxBld,KAAK2R,eACL3R,KAAKmd,cAAgB,KACrBnd,KAAK4R,kBACL5R,KAAKod,eACL,IAAIC,SAAW,MAGf,IAAKjc,UAAU,GAAI,CACf,MAAM,IAAIX,MAAM,iDAGpB,UAAWW,UAAU,IAAO,SAAU,CAClCpB,KAAKqE,KAAOjD,UAAU,QAIrB,UAAWA,UAAU,IAAO,SAAU,CACvC,IAAI4B,KAAO5B,UAAU,GACrB,IAAK,IAAI+V,KAAKnU,KAAM,CAChB,OAAQmU,GACR,IAAK,WACDkG,SAAWra,KAAKmU,GAChB,MACJ,IAAK,SACDnX,KAAKwD,WACL,IAAK,IAAI8Z,aAAata,KAAKmU,GAAI,CAC3BnX,KAAKwD,QAAQ8Z,UAAU7Z,eAAiBT,KAAKmU,GAAGmG,WAEpD,MACJ,IAAK,eACDtd,KAAK6V,cAAgB7S,KAAKmU,GAC1B,MACJ,QACInX,KAAKmX,GAAKnU,KAAKmU,KAK3B,IAAMnX,KAAKqE,KAA+B,CAEtC,MAAM,IAAI5D,MAAM,0DAIpB,GAAIT,KAAKwD,QAAS,CACd,UAAYxD,KAAKwD,UAAa,SAAU,CACpC,MAAM,IAAI/C,MAAM,mEAIpB,IAAK,IAAI8c,QAAQvd,KAAKwD,QAAS,CAC3B,IAAIP,IAAMjD,KAAKwD,QAAQ+Z,MACvB,KAAMta,eAAec,OAAQ,CACzB,MAAM,IAAItD,MAAM,2CAA6C8c,KAAO,qBAExEta,IAAIiB,QAAQ,SAAUpB,IAClB,UAAYA,KAAQ,SAAU,CAC1B,MAAM,IAAIrC,MAAM,0CACZ8c,KAAO,gCAGf,UAAYza,GAAGJ,KAAQ,WAAY,CAC/B,MAAM,IAAIjC,MAAM,iCAAmC8c,KAAO,uBAG9D,GAAIza,GAAGH,cAAiBG,GAAGH,QAAW,SAAU,CAC5C,MAAM,IAAIlC,MAAM,uCAAyC8c,KAAO,0BAMhF,GAAIvd,KAAKqE,KAAM,CAIXrE,KAAKkS,UAAYzS,SAASC,KAAK8d,gBAAgBC,YAAYzd,KAAKqE,MAChE,GAAIrE,KAAKkS,UAAW,CAChB,IAAKlS,KAAK0d,IACN1d,KAAK0d,IAAM1d,KAAKkS,UAAUwL,IAC9B,IAAK1d,KAAK2S,cAAgB3S,KAAKkS,UAAUS,aAAc,CAEnD3S,KAAK2S,aAAe3S,KAAKkS,UAAUS,aAGnC,GAAI3S,KAAKkS,UAAUyL,aAAc,CAC7B,IAAIC,OAAS5d,KAAKA,KAAKkS,UAAUyL,cAC3B,IAAIle,SAASC,KAAKiR,WAAW3Q,KAAMA,KAAKkS,UAAUyL,cACxD3d,KAAK4V,SAAS5V,KAAKkS,UAAUyL,cAAgBC,WAE5C,CACD,IAAK,IAAI/M,aAAa7Q,KAAKkS,UAAUkI,OAAQ,CACzC,IAAIwD,OAAS5d,KAAK6Q,WACZ,IAAIpR,SAASC,KAAKiR,WAAW3Q,KAAM6Q,WACzC7Q,KAAK4V,SAAS/E,WAAa+M,SAIvC,IAAK5d,KAAK6V,eAAiB7V,KAAKkS,UAAUyL,aACtC3d,KAAK6V,cAAgB7V,KAAKkS,UAAUyL,aAExC,IAAK3d,KAAK2S,aAAc,CACpB,IAAI9B,UAAY7Q,KAAK6V,cAAgB7V,KAAK6V,cAAgB,GAC1D7V,KAAK4V,SAAS/E,WAAa,IAAIpR,SAASC,KAAKiR,WAAW3Q,KAAM6Q,WAC9D,GAAIA,UACA7Q,KAAK6Q,WAAa7Q,KAAK4V,SAAS/E,WAIxC,IAAIgN,WACAhN,UACJ,GAAI7Q,KAAK2S,cACF3S,KAAKkS,UAAU+D,QACfjW,KAAKkS,UAAU+D,OAAO4H,WAAW7d,KAAK2S,cAAe,CACxDkL,WAAa7d,KAAKkS,UAAU+D,OAAO4H,WAAW7d,KAAK2S,cAAckL,WACjE,GAAInW,OAAO2L,KAAKwK,YAAY1a,SAAW,EAAG,CACtC0N,UAAYnJ,OAAO2L,KAAKwK,YAAY,GACpC,GAAIA,WAAWhN,WAAWmB,WAAY,CAClChS,KAAKkS,UAAUF,WAAa6L,WAAWhN,WAAWmB,kBAGvD,GAAIhS,KAAKkS,UAAU+D,QACnBjW,KAAKkS,UAAU+D,OAAO4H,YACtB7d,KAAKkS,UAAU+D,OAAO4H,WAAWhN,YACjC7Q,KAAKkS,UAAU+D,OAAO4H,WAAWhN,WAAWmB,WAAY,CAC3DhS,KAAKkS,UAAUF,WAAahS,KAAKkS,UAAU+D,OAAO4H,WAAWhN,WAAWmB,WAI5E,IAAK,IAAI8L,UAAU9d,KAAKkS,UAAUxP,GAAI,CAClC1C,KAAK8d,QAAU9d,KAAKkS,UAAUxP,GAAGob,QAAQ,YAG7C9d,KAAK4c,kBACD5c,KAAKkS,UAAU6L,QAAQ,YAAc3a,WAClCpD,KAAKkS,UAAU6L,QAAQ,YAAc3a,WACrCpD,KAAKkS,UAAU6L,QAAQ,YAAc3a,UAC5CpD,KAAK2c,oBAAsB3c,KAAKkS,UAAU6L,QAAQ,YAAc3a,UAKhE,IAAKpD,KAAKgd,SAAU,CAChB,IAAIgB,UAAYve,SAASC,KAAK8d,gBAAgBS,WAAWje,KAAKkS,UAAUgM,QAAQ7Z,MAChFrE,KAAKgd,SAAWgB,UAAUhB,SAC1Bhd,KAAKgd,SAASmB,WAAWne,WAG5B,CACD,MAAM,IAAIS,MAAM8J,IAAIyF,WAAW,aAAchQ,KAAKqE,YAGrD,CACDrE,KAAK4V,SAAS,IAAM,IAAInW,SAASC,KAAKiR,WAAW3Q,KAAM,IAG3D,IAAKA,KAAKgd,SAAU,CAChB,MAAM,IAAIvc,MAAM,kDAAoDT,KAAKqE,KAAO,KAIpF,IAAK,IAAI+Z,OAAOpe,KAAK4V,SAAU,CAC3B5V,KAAK4V,SAASwI,KAAKpH,QAAU,KAC7BhX,KAAK4V,SAASwI,KAAKzI,aAInB3V,KAAK4V,SAASwI,KAAKrH,cAAgB,KACnC/W,KAAK4V,SAASwI,KAAKtG,UAAY,MAC/B,IAAK9X,KAAKsY,iBACNtY,KAAKsY,iBAAmBtY,KAAK4V,SAASwI,KAC1Cpe,KAAK6c,cAET,GAAI7c,KAAK6c,aAAe,EACpB7c,KAAKsY,iBAAmB,SACvB,CAGDtY,KAAKkR,OAAS,KAIlB,UAAYxJ,OAAOmS,gBAAmB,WAAY,CAC9C7Z,KAAKma,eAAiB,MACtBzS,OAAOmS,eACH7Z,KACA,iBAEI+Z,IAAK,WACD,OAAO/Z,KAAKma,gBAEhBH,IAAK,SAAUvU,OACXzF,KAAKma,eAAiB1U,MAAQ,KAAO,MAErC,IAAK,IAAI2Y,OAAOpe,KAAK4V,SAAU,CAC3B5V,KAAK4V,SAASwI,KAAK7E,cAAgBvZ,KAAKma,iBAGhDF,WAAY,KACZC,UAAW,OAEnBla,KAAK8Z,UAAY,KACjBpS,OAAOmS,eACH7Z,KACA,YAEI+Z,IAAK,WACD,OAAO/Z,KAAK8Z,WAEhBE,IAAK,SAAUvU,OACXzF,KAAK8Z,UAAYrU,MAAQ,KAAO,MAEhC,IAAK,IAAI2Y,OAAOpe,KAAK4V,SAAU,CAC3B5V,KAAK4V,SAASwI,KAAKhH,SAAWpX,KAAK8Z,YAG3CG,WAAY,KACZC,UAAW,OAKvBla,KAAKqe,eACL,UAAY3W,OAAOmS,gBAAmB,WAAY,CAC9CnS,OAAOmS,eAAgB7Z,KACnB,oBAEI+Z,IAAK,WACD,OAAO/Z,KAAKqe,aAEhBpE,WAAY,QAQxB,GAAIja,KAAKkS,WAAalS,KAAKkS,UAAUkI,OAAQ,CACzC,IAAK,IAAIgE,OAAOpe,KAAK4V,SAAU,CAC3B5V,KAAK4V,SAASwI,KAAKtN,QAAU9Q,KAAKkS,UAAUkI,OAAOgE,KACnDpe,KAAK4V,SAASwI,KAAKrN,aAAe/Q,KAAKkS,UAAUoM,YAAYF,KAG7Dpe,KAAK4V,SAASwI,KAAKvX,WACnB,IAAIuT,OAASpa,KAAK4V,SAASwI,KAAKtN,QAChC,IAAK,IAAIX,EAAI,EAAGA,EAAIiK,OAAOjX,OAAQgN,IAAK,CACpCnQ,KAAK4V,SAASwI,KAAKvX,QAAQuT,OAAOjK,GAAG9L,KAAKZ,eAAiB2W,OAAOjK,GAClE,UAAWiK,OAAOjK,GAAW,WAAM,YAAa,CAC5C,UAAYiK,OAAOjK,GAAW,WAAM,UAC5BiK,OAAOjK,GAAGrJ,SAASyX,SAAW,GAAK,CACvC,MAAM,IAAI9d,MAAM8J,IAAIyF,WAAW,aAC3B,OAAQ,UAAYoK,OAAOjK,GAAG9L,KAAO,kBAAoBrE,KAAKkS,UAAU7N,KAAO,IAAK,eAKpG,GAAIrE,KAAK4V,SAASwI,KAAKtN,gBAAmBpJ,OAAOmS,gBAAmB,WAAY,CAE5E,IAAK,IAAI1J,EAAI,EAAGA,EAAInQ,KAAK4V,SAASwI,KAAKtN,QAAQ3N,OAAQgN,IAAK,CACxD,IAAI+F,UAAYlW,KAAK4V,SAASwI,KAAKtN,QAAQX,GAAG9L,KAC1CgB,UAAYrF,KAAK4V,SAASwI,KAAKtN,QAAQX,GAC3C,UAAWnQ,KAAK4V,SAASwI,KAAKlI,YAAe,YAAa,CACtDlW,KAAKsc,gBAAgB8B,IAAKlI,WAE9B,GAAI7Q,UAAUC,OAAS,QAAS,CAC5B,IAAK,IAAI8N,EAAI,EAAGA,EAAI/N,UAAUoR,SAAUrD,GAAK,EAAG,CAC5C,IAAI/O,KAAO6R,UAAYzW,SAASC,KAAKqC,KAAK0a,uBAAyBrJ,EAAI,GAGvE,IAAKpT,KAAK4V,SAASwI,KAAKvX,QAAQxC,KAAKZ,eAAgB,CACjDzD,KAAKsc,gBAAgB8B,IAAK/Z,WAQlD,GAAIrE,KAAKsY,mBACDtY,KAAKsY,iBAAiBxH,SACvB9Q,KAAKkS,UAAUkI,OAAO,IAAK,CAC9Bpa,KAAKsY,iBAAiBxH,QAAU9Q,KAAKkS,UAAUkI,OAAO,SAGzD,CACD,GAAIpa,KAAKsY,iBACLtY,KAAKsY,iBAAiBxH,WAI9B,GAAI9Q,KAAK6c,YAAc,EAAG,CACtB,IAAK,IAAIuB,OAAOpe,KAAK4V,SAAU,CAC3B,IAAIwE,UACJ,IAAIwB,MAAQ,MACZ,IAAK,IAAIzL,EAAI,EAAGA,EAAInQ,KAAK4V,SAASwI,KAAKtN,QAAQ3N,OAAQgN,IAAK,CACxD,IAAI/K,MAAQpF,KAAK4V,SAASwI,KAAKtN,QAAQX,GAEvC,GAAI/K,MAAMwR,OACHxR,MAAME,MAAQ,SAAWF,MAAMwR,MAAM4H,KAAM,CAC9C,GAAIxe,KAAK4V,SAASxQ,MAAMf,MAAO,CAC3BuX,MAAQ,KACR5b,KAAK4V,SAASxQ,MAAMf,MAAMyT,UAAY,WAI1CsC,OAAOzW,KAAKyB,OAGpB,GAAIwW,MACA5b,KAAK4V,SAASwI,KAAKtN,QAAUsJ,QAKzC,GAAIpa,KAAKkS,WAAalS,KAAKkS,UAAUuM,UAAW,CAC5C,IAAK,IAAItO,EAAI,EAAGA,EAAInQ,KAAKkS,UAAUuM,UAAUtb,OAAQgN,IAAK,CACtD,IAAIuO,aAAe1e,KAAKkS,UAAUuM,UAAUtO,GAG5C,GAAIuO,aAAaC,WACVD,aAAaE,YACZF,aAAaC,YAAcD,aAAaE,WAAa,CAEzD,GAAIF,aAAaG,0BAA0B9a,MAAO,CAC9C,IAAK,IAAIqP,EAAI,EAAGA,EAAIsL,aAAaG,eAAe1b,OAAQiQ,IAAK,CACzD,IAAI8C,UACJ,IAAI9Q,MACJ,GAAIpF,KAAK4V,SAAS8I,aAAaE,YAAY/X,QAAS,CAChDqP,UAAYwI,aAAaG,eAAezL,GAAG8D,gBAC3C9R,MAAMpF,KAAK4V,SAAS8I,aAAaE,YAAY/X,QAAQqP,UAAUzS,eAC/D,GAAI2B,MAAO,CACPsZ,aAAaG,eAAezL,GAAG8D,gBAAkB9R,MAAMf,UAGvD,MAAM,IAAI5D,MAAM8J,IAAIyF,WAAW,aAAckG,YAErD,GAAIlW,KAAK4V,SAAS8I,aAAaC,WAAW9X,QAAS,CAC/CqP,UAAYwI,aAAaG,eAAezL,GAAG6D,eAC3C7R,MAAMpF,KAAK4V,SAAS8I,aAAaC,WAAW9X,QAAQqP,UAAUzS,eAC9D,GAAI2B,MAAO,CACPsZ,aAAaG,eAAezL,GAAG6D,eAAiB7R,MAAMf,UAGtD,MAAM,IAAI5D,MAAM8J,IAAIyF,WAAW,aAAckG,cAI7DlW,KAAK4V,SAAS8I,aAAaC,WAAW3H,QAAU0H,aAAaE,WAC7D5e,KAAK4V,SAAS8I,aAAaC,WAAW5H,cAAgB2H,aAAaG,eACnE7e,KAAK4V,SAAS8I,aAAaE,YAAYjJ,UAAUhS,KAAK+a,aAAaC,aAM/E3e,KAAK0W,iBAAmB,SAAUtR,OAC9B,IAAI0Z,aACAC,EAAG9G,EAAG+G,EACNC,OAAS,MAEb,GAAK7Z,MAAME,OAAS,UACbF,MAAMG,QACLH,MAAMG,OAAO8U,QAAQ,WAAa,GAClCjV,MAAM,WAAa,CACvB6Z,OAAS,UACN,GAAK7Z,MAAME,OAAS,SACbF,MAAMM,SACLN,MAAMM,QAAQ2U,QAAQ,UAAY,GAClCjV,MAAM,WAAa,CAC9B6Z,OAAS,SACN,CACHH,aAAe1Z,MAAM,WAGzB,GAAI6Z,OAAQ,CACR,OAAQ7Z,MAAM,WAAWoU,eACzB,IAAK,MACDsF,cAAe,IAAI5U,MAAOT,cAC1B,MACJ,IAAK,QACDsV,EAAI,IAAI7U,KACR+N,EAAItP,OAAQoW,EAAE9V,WAAa,GAC3B,GAAIgP,EAAE9U,SAAW,EAAG,CAChB8U,EAAI,IAAMA,EAEd+G,EAAIrW,OAAQoW,EAAE/V,WACd,GAAIgW,EAAE7b,SAAW,EAAG,CAChB6b,EAAI,IAAMA,EAEdF,aAAeC,EAAE7V,cAAgB,IAAM+O,EAAI,IAAM+G,EACjD,MACJ,QACIF,aAAe1Z,MAAM,YAI7B,OAAO0Z,cAQX9e,KAAK2W,eAAiB,SAAUuI,eAAgBnX,MAAOtC,OACnD,IAAI+W,WAEJA,QAAQnY,KAAO6a,eAAiBzf,SAASC,KAAKqC,KAAK0a,uBAA0B1U,OAAS,EAAMA,MAAQ,EAAK,IACzGyU,QAAQ/W,MAAQA,MAAQA,MAAMsC,OAAS3E,UACvC,OAAOoZ,SAGXxc,KAAKmf,UAAY,WACb,OAAOnf,KAAK2S,aAAe,KAAO,OAItC3S,KAAKof,gBAAkB,SAAUxO,KAAM5O,QAASE,SAE5C,GAAIA,QAAQmd,OAASnd,QAAQ4b,OAAQ,CACjClN,KAAK/M,QAAQ,cAAe3B,QAAQ4b,OAAQlN,KAAM5O,QAASE,SAG/D,GAAIA,QAAQod,SAAU,CAClB,GAAItd,QAAS,CACTE,QAAQod,SAAS3e,QAAQiQ,KAAM5O,QAASE,aAEvC,CACDA,QAAQod,SAAS1e,OAAOgQ,KAAM5O,QAASE,YAMnDlC,KAAKuf,eAAiB,aAKtBvf,KAAKwf,aAAe,aASpBxf,KAAKyf,aAAe,SAAUxd,IAAKyd,OAAQhC,IAAKiC,QAASzd,SAErD,SAAS0d,mBACL,IAAIC,MAAQ,KACZ,GAAIF,QAAS,CACT1d,IAAI6d,iBAAiB,eAAgB,mCACrCD,MAAQrb,KAAKC,UAAUkb,SAG3B,IACI1d,IAAI8d,KAAKF,OACX,MAAOhhB,GACLqD,QAAQF,QAAU,MAClBE,QAAQ8d,UAAYnhB,EAEpBoD,IAAI2O,KAAKoM,SAASiD,sBAAsBhe,IAAKC,QAAQF,QAASE,UAOtE,IAAKD,IAAK,CACNA,IAAM,IAAItD,eAMVsD,IAAIie,aAAelgB,KAAKof,gBACxBnd,IAAIke,YAAcngB,KAAKuf,eACvBtd,IAAIme,UAAYpgB,KAAKwf,aACrBvd,IAAIoe,mBAAqBrgB,KAAKsgB,0BAG9B,GAAIpe,QAAQmd,OAASnd,QAAQ4b,OAAQ,CACjC9d,KAAK6D,QAAQ,eAAgB3B,QAAQ4b,OAAQ9d,KAAMkC,SAMvD,GAAIyd,QAAS,CACT,GAAI3f,KAAKkS,WAAalS,KAAKkS,UAAUgM,QAAS,CAC1C,IAAIqC,WAAavgB,KAAKkS,UAAUgM,QAAQqC,WACxC,GAAIvgB,KAAKkS,UAAUgM,QAAQsC,UACpBxgB,KAAKkS,UAAUgM,QAAQsC,SAASD,aAAend,UAAW,CAC7Dmd,WAAavgB,KAAKkS,UAAUgM,QAAQsC,SAASD,WAEjD,GAAIA,WAAY,CACZZ,SAAWzd,QAASyd,YAMpC1d,IAAIC,QAAUA,QACdD,IAAI2O,KAAO5Q,KACXkC,QAAQ0O,KAAO5Q,KACfkC,QAAQD,IAAMA,IAEdjC,KAAKgd,SAASyD,aAAaxe,IAAKyd,OAAQhC,IAAKxb,QAAQmd,MAAOO,kBAE5D,OAAO1d,SAQXlC,KAAK0gB,eAAiB,WAClB,IAAIhL,cACJ,GAAI1V,KAAK2S,aAAc,CACnB+C,WAAW1V,KAAK2S,iBAEhB,IAAIgO,oBAAsB3gB,KAAK8W,iBAE/B,IACI9W,KAAK8W,iBAAmB,MACxB,IAAK,IAAIsH,OAAOpe,KAAK4V,SAAU,CAC3BF,WAAW1V,KAAK2S,cAAcyL,KAAOpe,KAAK4V,SAASwI,KAAK1J,WAGhE,QAEI1U,KAAK8W,iBAAmB6J,yBAG3B,CACD,GAAI3gB,KAAK6V,cAAe,CACpBH,WAAW1V,KAAK6V,eAAiB7V,KAAK0U,eAGtC,OAAO1U,KAAK0U,UAEpB,OAAOgB,YAiBX1V,KAAK4gB,uBAAyB,WAC1B,IAAIlL,cACJ,GAAI1V,KAAK2S,aAAc,CACnB+C,WAAW1V,KAAK2S,iBAEhB,IAII,IAAK,IAAIyL,OAAOpe,KAAK4V,SAAU,CAC3B,IAAIiL,OAAS7gB,KAAK4V,SAASwI,KAO3B,GAAIyC,OAAO/I,UAAW,SAEtB9X,KAAKuU,cAAgB,MAGrB,GAAIsM,OAAOlL,UAAUxS,OAAS,EAAG,CAC7B,IAAK,IAAIgN,EAAI,EAAGA,EAAI0Q,OAAOlL,UAAUxS,OAAQgN,IAAK,CAC9C,IAAI4L,YAAc/b,KAAK4V,SAASiL,OAAOlL,UAAUxF,IAEjD,GAAI4L,YAAYjE,UAAW,CACvB9X,KAAKuU,cAAgB,KACrB,QAKZmB,WAAW1V,KAAK2S,cAAcyL,KAAOpe,KAAK4V,SAASwI,KAAK1J,WAGhE,MAAO7V,GACH,MAAM,IAAI4B,MAAM8J,IAAIyF,WAAW,aAAcnR,EAAE6E,UAEnD,QAEI1D,KAAKuU,cAAgB,WAGxB,CACD,GAAIvU,KAAK6V,cAAe,CACpBH,WAAW1V,KAAK6V,eAAiB7V,KAAK0U,eAGtC,OAAO1U,KAAK0U,UAEpB,OAAOgB,YAQX1V,KAAK8gB,YAAc,WAEf,GAAI9gB,KAAK2S,aAAc,CACnB,IAAIiF,aACJ,IAAIiJ,OACJ,IAAI9E,YAKJ,IAAK,IAAIqC,OAAOpe,KAAK4V,SAAU,CAC3BiL,OAAS7gB,KAAK4V,SAASwI,KAOvB,GAAIyC,OAAO3I,kBAAmB,CAE1B,IAAK,IAAI/H,EAAI,EAAGA,EAAI0Q,OAAO1P,MAAMhO,OAAQgN,IAAK,CAC1CyH,aAAeiJ,OAAO1P,MAAMhB,GAE5B,IAAK,IAAIiD,EAAI,EAAGA,EAAIyN,OAAOlL,UAAUxS,OAAQiQ,IAAK,CAC9C2I,YAAc/b,KAAK4V,SAASiL,OAAOlL,UAAUvC,IAE7C,GAAIwE,aAAamE,YAAYpV,OAAQ,QAC1BiR,aAAamE,YAAYpV,cAW5D3G,KAAKuV,iBAAmB,SAAUrE,OAAQsE,iBACtC,GAAIxV,KAAKsY,iBACL,OAAOtY,KAAKsY,iBAAiB/C,iBAAiBrE,OAAQsE,iBAC1D,MAAM,IAAI/U,MAAM8J,IAAIyF,WAAW,aAAc,wBAGjDhQ,KAAK8V,mBAAqB,SAAUJ,YAChC,GAAI1V,KAAKsY,iBACL,OAAOtY,KAAKsY,iBAAiBxC,mBAAmBJ,YACpD,MAAM,IAAIjV,MAAM8J,IAAIyF,WAAW,aAAc,0BAGjDhQ,KAAKmW,IAAM,SAAU4K,KACjB,GAAI/gB,KAAKsY,iBACL,OAAOtY,KAAKsY,iBAAiBnC,IAAI4K,KACrC,MAAM,IAAItgB,MAAM8J,IAAIyF,WAAW,aAAc,uBAIjDhQ,KAAKqW,OAASrW,KAAKmW,IAEnBnW,KAAKsU,QAAU,WACX,IAAK,IAAI8J,OAAOpe,KAAK4V,SAAU,CAC3B,GAAI5V,KAAK4V,SAAS5V,KAAK4V,SAASwI,KAAKzX,OAAO2N,UACxC,OAAO,KAEf,OAAO,OAGXtU,KAAK0U,QAAU,SAAUC,QACrB,GAAI3U,KAAKsY,iBACL,OAAOtY,KAAKsY,iBAAiB5D,QAAQC,QACzC,MAAM,IAAIlU,MAAM8J,IAAIyF,WAAW,aAAc,eAGjDhQ,KAAK+V,UAAY,WACb,GAAI/V,KAAKsY,iBACL,OAAOtY,KAAKsY,iBAAiBvC,YACjC,MAAM,IAAItV,MAAM8J,IAAIyF,WAAW,aAAc,iBAGjDhQ,KAAK8Y,SAAW,SAAU/G,IACtB,GAAI/R,KAAKsY,iBACL,OAAOtY,KAAKsY,iBAAiBQ,SAAS/G,IAC1C,MAAM,IAAItR,MAAM8J,IAAIyF,WAAW,aAAc,gBAGjDhQ,KAAK6W,aAAe,SAAUpR,MAAOH,KAAM0b,UACvC,UAAYvb,OAAS,UAAcH,OAAS,KAAO,OAAOG,MAC1D,IAAI9D,OAAS8D,MACb,IACI,GAAIH,MAAQ,QAAS,CACjB,IAAI3D,UAEJ8D,MAAQA,MAAMzB,MAAM,EAAGyB,MAAMtC,OAAS,GACtC,IAAI8d,SAAWxb,MAAMyb,MAAM,KAC3B,IAAIC,YAAeH,UAAaA,UAAY,SAC5C,IAAK,IAAI7Q,EAAI,EAAGA,EAAI8Q,SAAS9d,OAAQgN,IAAK,CACtCxO,OAAOwO,GAAKgR,YAAcnhB,KAAK6W,aAAaoK,SAAS9Q,GAAI6Q,SAAU,MAAQC,SAAS9Q,SAGvF,GAAI7K,MAAQ,UAAW,CACxB3D,OAASsG,SAASxC,YAEjB,GAAIH,MAAQ,SAAU,CACvB3D,OAASyf,WAAW3b,WAEnB,CACD9D,OAAS8D,OAGjB,MAAO5G,GACH,MAAM,IAAI4B,MAAM8J,IAAIyF,WAAW,aAC3B,2CAA6CnR,EAAE6E,UAEvD,OAAO/B,QAGX3B,KAAKuY,OAAS,SAAU3Q,QACpB,GAAI5H,KAAKsY,iBAAkB,CACvB,OAAOtY,KAAKsY,iBAAiBC,OAAO3Q,aAGpC,MAAM,IAAInH,MAAM8J,IAAIyF,WAAW,aAAc,0BAIrDhQ,KAAKwY,OAASxY,KAAKuY,OAEnBvY,KAAKyY,OAAS,WACV,GAAIzY,KAAKsY,iBAAkB,CACvB,OAAOtY,KAAKsY,iBAAiBG,cAG7B,MAAM,IAAIhY,MAAM8J,IAAIyF,WAAW,aAAc,cAGrDhQ,KAAK2Y,MAAQ,WACT,GAAI3Y,KAAKsY,iBACL,OAAOtY,KAAKsY,iBAAiBK,QACjC,MAAM,IAAIlY,MAAM8J,IAAIyF,WAAW,aAAc,aAIjDhQ,KAAK4Y,UAAY,WACb,GAAI5Y,KAAKsY,iBACL,OAAOtY,KAAKsY,iBAAiBM,YACjC,MAAM,IAAInY,MAAM8J,IAAIyF,WAAW,aAAc,iBAGjDhQ,KAAK6Y,eAAiB,WAClB,GAAI7Y,KAAKsY,iBACL,OAAOtY,KAAKsY,iBAAiBO,iBACjC,MAAM,IAAIpY,MAAM8J,IAAIyF,WAAW,aAAc,sBAMjDhQ,KAAK+Y,KAAO,SAAUrW,IAClB,GAAI1C,KAAKsY,iBACL,OAAOtY,KAAKsY,iBAAiBS,KAAKrW,IACtC,MAAM,IAAIjC,MAAM8J,IAAIyF,WAAW,aAAc,YAGjDhQ,KAAKgZ,QAAU,SAAUtW,IACrB,GAAI1C,KAAKsY,iBACL,OAAOtY,KAAKsY,iBAAiBU,QAAQtW,IACzC,MAAM,IAAIjC,MAAM8J,IAAIyF,WAAW,aAAc,eAGjDhQ,KAAKua,cAAgB,SAAUvF,YAC3B,GAAIhV,KAAKsY,iBACL,OAAOtY,KAAKsY,iBAAiBiC,cAAcvF,YAC/C,MAAM,IAAIvU,MAAM8J,IAAIyF,WAAW,aAAc,qBAGjDhQ,KAAKwa,UAAY,SAAU9X,IACvB,GAAI1C,KAAKsY,iBACL,OAAOtY,KAAKsY,iBAAiBkC,UAAU9X,IAC3C,MAAM,IAAIjC,MAAM8J,IAAIyF,WAAW,aAAc,iBAGjDhQ,KAAK8U,KAAO,SAAU7T,MAClB,GAAIjB,KAAKsY,iBACL,OAAOtY,KAAKsY,iBAAiBxD,KAAK7T,MACtC,MAAM,IAAIR,MAAM8J,IAAIyF,WAAW,aAAc,YAGjDhQ,KAAKqhB,aAAe,SAAUC,kBAE1B,UAAU,kBAAsB,YAAa,CACzCA,iBAAmB,MAGvBthB,KAAK2R,eACL,IAAK,IAAIyM,OAAOpe,KAAK4V,SAAU,CAC3B5V,KAAK4V,SAASwI,KAAKzM,eAGnB,GAAI2P,iBAAkB,CAClBthB,KAAK4V,SAASwI,KAAK5C,wBAc/Bxb,KAAKuhB,uBAAyB,SAAUC,OACpC,IAAIC,QACAC,UACAC,YACAC,oBACAzR,EAKJ,GAAIqR,iBAAiB9Z,OAAQ,CACzB,GAAI8Z,iBAAiBzd,MAAO,CACxB0d,QAAUD,MACVE,UAAY,MAEZ1hB,KAAK6hB,oBAAsB,MAC3B7hB,KAAK8hB,qBAAuB,MAE5B,IAAK,IAAI1D,OAAOpe,KAAK4V,SAAU,CAC3B,GAAI5V,KAAK4V,SAASwI,KAAKzM,YAAYxO,OAAS,EAAG,CAC3Cue,UAAY,MAGpB,GAAIA,UAAW,CACX1hB,KAAK6hB,oBAAsB,KAC3B7hB,KAAK8hB,qBAAuB,KAE5B,IAAK3R,EAAI,EAAGA,EAAIsR,QAAQte,OAAQgN,GAAK,EAAG,CACpC,GAAIsR,QAAQtR,GAAGe,SAAWuQ,QAAQtR,GAAGe,OAAOxR,KAAKgc,UAAW,CACxD1b,KAAK6hB,oBAAsB,MAC3B,cAGL,GAAIJ,QAAQte,OAAS,EAAG,CAC3BnD,KAAK6hB,oBAAsB,KAC3B7hB,KAAK8hB,qBAAuB,MAC5BF,oBAAsB,MAEtB,IAAKzR,EAAI,EAAGA,EAAIsR,QAAQte,OAAQgN,GAAK,EAAG,CACpC,GAAIsR,QAAQtR,GAAGe,OAAQ,CACnB,GAAIuQ,QAAQtR,GAAGe,OAAOxR,KAAKgc,UAAW,CAClC1b,KAAK8hB,qBAAuB,SACzB,CACHF,oBAAsB,OAIlC,GAAIA,sBAAwB5hB,KAAK8hB,qBAAsB,CACnD9hB,KAAK6hB,oBAAsB,YAGhC,CACH,GAAIL,MAAMzE,sBAAsBhZ,MAAO,CACnC,GAAIyd,MAAMzE,WAAW5Z,OAAS,IACtBqe,MAAMzE,WAAW,GAAG/a,QAAS,CAEjChC,KAAK6hB,oBAAsB,KAC3B7hB,KAAK8hB,qBAAuB,KAE5B,IAAK3R,EAAI,EAAGA,EAAIqR,MAAMzE,WAAW5Z,OAAQgN,GAAK,EAAG,CAC7C,GAAIqR,MAAMzE,WAAW5M,GAAGnO,QAAS,CAC7BhC,KAAK6hB,oBAAsB,MAC3B,aAGL,CAEH7hB,KAAK6hB,oBAAsB,MAC3B7hB,KAAK8hB,qBAAuB,MAE5B,IAAK3R,EAAI,EAAGA,EAAIqR,MAAMzE,WAAW5Z,OAAQgN,GAAK,EAAG,CAC7C,IAAKqR,MAAMzE,WAAW5M,GAAGnO,QAAS,CAC9BhC,KAAK8hB,qBAAuB,KAC5B,gBAMjB,CAEH9hB,KAAK6hB,oBAAsBL,MAC3BxhB,KAAK8hB,qBAAuBN,QAOpCxhB,KAAK+hB,KAAO,WACR,IAAIC,SACA7hB,QACA0d,WACAoE,QAEJ,IAEIjiB,KAAKqhB,eAGLrhB,KAAKuhB,uBAAuBne,WAG5B,GAAIhC,UAAU+B,SAAW,EAAG,CAExB,UAAW/B,UAAU,IAAO,WAAY,CACpC,MAAM,IAAIX,MAAM8J,IAAIyF,WAAW,aAAc,OAAQ,qBAGzD6N,WAAa7d,KAAKkiB,oBAAoB,QAGtC,GAAIrE,YAAcA,WAAWsE,YAAa,CACtCF,QAAUxiB,SAASC,KAAK2Q,cAAcI,UAAUoN,WAAWsE,aAC3D,IAAKF,QAAS,CACV,MAAM,IAAIxhB,MAAM8J,IAAIyF,WAAW,aAAc6N,WAAWsE,eAKhE,IAAItf,OACJ,GAAIzB,UAAU,KAAO,MAAQA,UAAU,KAAOgC,UAAW,CACrDP,OAAS,QAER,UAAWzB,UAAU,IAAO,SAAU,CACvCyB,OAASzB,UAAU,GACnB4gB,UAAYnf,OAAQA,aAEnB,UAAWzB,UAAU,IAAO,SAAU,CAIvC,GAAIA,UAAU,GAAGghB,UAAU,CACvBpiB,KAAKod,eAAiBhc,UAAU,GAAGghB,UACnC,OAAOhhB,UAAU,GAAGghB,WAChB,KAAK3iB,SAASC,KAAKqC,KAAKsgB,YACxB,KAAK5iB,SAASC,KAAKqC,KAAKugB,WACxB,KAAK7iB,SAASC,KAAKqC,KAAKwgB,WACxB,KAAK9iB,SAASC,KAAKqC,KAAKygB,aAChB,MACR,QACI,MAAM,IAAI/hB,MAAM8J,IAAIyF,WAAW,gBAM3C,GAAIiS,QAAS,CACT,UAAWA,QAAsB,iBAAM,WAAY,CAC/CD,SAAWC,QAAQQ,eAAeziB,KAAMoB,UAAU,IAAMwB,UAAW,aAElE,CACDof,SAAW5gB,UAAU,QAGxB,CACD,GAAIyc,WAAW6E,aAAc,CACzB,MAAM,IAAIjiB,MAAM8J,IAAIyF,WAAW,eAEnCgS,SAAW5gB,UAAU,QAGxB,CACD,MAAM,IAAIX,MAAM8J,IAAIyF,WAAW,aAAc,OAAQ,0BAGxD,CAEDgS,SAAW,KAGf,IAAI/f,IAAM,IAAItD,eACd,IAAIuD,SACAD,IAAKA,IACL2O,KAAM5Q,KACNgiB,SAAUA,UAGd/f,IAAIC,QAAUA,QACdD,IAAI2O,KAAO5Q,KAEXiC,IAAIke,YAAcngB,KAAK2iB,aACvB1gB,IAAIme,UAAYpgB,KAAK4iB,WACrB3gB,IAAIie,aAAelgB,KAAK6iB,cACxB5gB,IAAIoe,mBAAqBrgB,KAAKsgB,0BAE9BtgB,KAAK6D,QAAQ,aAAc7D,KAAMkC,SAEjC,GAAIlC,KAAKkS,UAAW,CAChB,UAAWlS,KAAKkS,UAAU6L,QAAY,MAAK,WAAY,CACnD9b,IAAI+f,SAAWA,SACfhiB,KAAKkS,UAAU6L,QAAQ+E,KAAK7e,KAAKjE,KAAMiC,IAAKjC,KAAK8c,QACjD,GAAI7a,IAAIC,QAAQod,SAAU,CACtBnf,QAAU8B,IAAIC,QAAQod,SAASnf,eAGlC,CACD,MAAM,IAAIM,MAAM,6CAGnB,CAEDT,KAAKgd,SAASyD,aAAaxe,IAAK,MAAOjC,KAAK0d,IAAK1d,KAAK8c,QACtD,IACI7a,IAAI8d,KAAK,MAEb,MAAOlhB,GACHqD,QAAQ8d,UAAYnhB,EAEpBoD,IAAI2O,KAAKoM,SAASiD,sBAAsBhe,IAAKC,QAAQF,QAASE,UAOtE,GAAIA,QAAQF,SAAW,OAASE,QAAQ8d,UAAW,CAE/C,UAAY/d,IAAIme,WAAc,WAAY,CACtCne,IAAIme,UAAUne,IAAI2O,KAAM1O,QAAQF,QAASE,SAI7CD,IAAI2O,KAAKoM,SAASiD,sBAAsBhe,IAAKC,QAAQF,QAASE,SAE9D,UAAYD,IAAIie,cAAiB,WAAY,CACzCje,IAAIie,aAAaje,IAAI2O,KAAM1O,QAAQF,QAASE,WAGtD,MAAOnD,OACL,GAAIU,SAASE,KAAKI,SAASM,kBAAmB,CAC1C,MAAMtB,UACH,CACH,IAAIugB,SACJ,KAAMrd,KAAOA,IAAIqd,UAAW,CACxBA,SAAW,IAAI7f,SAASE,KAAKI,SAC7BI,QAAUmf,SAASnf,UAEvBmf,SAAS1e,OAAOZ,KAAM,OAClB+iB,YAAahkB,SAIzB,OAAOoB,SAIXH,KAAK8iB,KAAO9iB,KAAK+hB,KAKjB/hB,KAAKoU,WAAa,WACd,IAAK,IAAIgK,OAAOpe,KAAK4V,SAAU,CAC3B5V,KAAK4V,SAASwI,KAAKhK,eAO3BpU,KAAKgjB,sBAAwB,SAAUpgB,UAAWof,SAAU9f,QACxDge,aAAcC,YAAaC,WAE3B,IAAIne,IAAM,IAAItD,eACduD,QAAQD,IAAMA,IACdC,QAAQ0O,KAAO5Q,KACfkC,QAAQ8f,SAAWA,SACnB9f,QAAQU,UAAYA,UACpBX,IAAI2O,KAAO5Q,KACXiC,IAAIie,aAAeA,aACnBje,IAAIke,YAAcA,YAClBle,IAAIme,UAAYA,UAChBne,IAAIoe,mBAAqBrgB,KAAKsgB,0BAC9Bre,IAAIC,QAAUA,QAEdlC,KAAKijB,oBAAoBjB,UAEzB,IAAIkB,aACJ,OAAQtgB,WACR,KAAKnD,SAASC,KAAKqC,KAAKohB,SACxB,KAAK1jB,SAASC,KAAKqC,KAAKsZ,WACxB,KAAK5b,SAASC,KAAKqC,KAAKuZ,WACxB,KAAK7b,SAASC,KAAKqC,KAAKwZ,WACxB,KAAK9b,SAASC,KAAKqC,KAAKqhB,WACpBF,aAAepZ,wBAAwBlH,WACvC,MACJ,QACI,MAAM,IAAInC,MAAM,8BAAgCmC,UAAY,qBAGhE,GAAI5C,KAAKkS,UAAW,CAChB,UAAWlS,KAAKkS,UAAU6L,QAAQmF,eAAkB,WAAY,CAC5DjhB,IAAI+f,SAAWA,SACfhiB,KAAKkS,UAAU6L,QAAQmF,cAAcjhB,IAAKjC,KAAK8c,YAE9C,CAED,MAAM,IAAIrc,MAAM8J,IAAIyF,WAAW,aAAckT,aAAa1J,mBAMtExZ,KAAKqjB,sBAAwB,WACzB,IAAIlT,EAAGiO,IAAKnI,OAGZ,GAAIjW,KAAK4R,oBAAsBxO,UAAW,CACtC,OAGJpD,KAAK4R,kBAAoB,MACzB,IAAKwM,OAAOpe,KAAK4V,SAAU,CACvBK,OAASjW,KAAK4V,SAASwI,KAAKrI,YAC5B/V,KAAK4V,SAASwI,KAAKkF,2BACnBtjB,KAAK4V,SAASwI,KAAKxM,kBAAoB,MAGvC,IAAKzB,EAAI,EAAGA,EAAI8F,OAAO9S,OAAQgN,IAAK,CAChC,GAAI8F,OAAO9F,GAAGzK,SAAW1F,KAAKujB,wBAAwBtN,OAAO9F,GAAGzK,SAAU,CACtE1F,KAAK4V,SAASwI,KAAKkF,wBAAwB3f,MAAMU,KAAM4R,OAAO9F,GAAG9L,KAC7DqB,QAASuQ,OAAO9F,GAAGzK,WAG/B,GAAI1F,KAAK4V,SAASwI,KAAKkF,wBAAwBngB,OAAS,EAAG,CACvDnD,KAAK4R,kBAAoB,KACzB5R,KAAK4V,SAASwI,KAAKxM,kBAAoB,QAKnD5R,KAAKijB,oBAAsB,SAAUjB,UACjC,IAAI5D,IACAoF,WAEJ,GAAIxjB,KAAK4R,oBAAsB,MAAO,CAClC,OAIJ,IAAKwM,OAAOpe,KAAK4V,SAAU,CACvB,GAAI5V,KAAK4V,SAASwI,KAAKxM,kBAAmB,CACtC,GAAIoQ,SAAShiB,KAAK2S,cAAe,CAE7B,GAAIqP,SAAShiB,KAAK2S,cAAcyL,KAAM,CAClCpe,KAAKyjB,kBAAkBzjB,KAAK4V,SAASwI,KAAM4D,SAAShiB,KAAK2S,cAAcyL,MAI3EoF,WAAaxB,SAAShiB,KAAK2S,cAAc,gBACzC,GAAI6Q,YAAcA,WAAWpF,KAAM,CAC/Bpe,KAAKyjB,kBAAkBzjB,KAAK4V,SAASwI,KAAMoF,WAAWpF,YAIzD,GAAI4D,SAAS5D,KAAM,CACpBpe,KAAKyjB,kBAAkBzjB,KAAK4V,SAASwI,KAAM4D,SAAS5D,UAMpEpe,KAAKyjB,kBAAoB,SAAUxe,SAAUye,WACzC,IAAIvT,EAEJ,IAAKA,EAAI,EAAGA,EAAIuT,UAAUvgB,OAAQgN,IAAK,CACnCnQ,KAAK2jB,gBAAgB1e,SAAUye,UAAUvT,MAIjDnQ,KAAK2jB,gBAAkB,SAAU1e,SAAUiM,QACvC,IAAIf,EACA/K,MAEJ,IAAK+K,EAAI,EAAGA,EAAIlL,SAASqe,wBAAwBngB,OAAQgN,GAAK,EAAG,CAC7D/K,MAAQH,SAASqe,wBAAwBnT,GACzCe,OAAO9L,MAAMf,MAAQrE,KAAK4jB,cAAc1S,OAAO9L,MAAMf,MAAOe,MAAMM,WAI1E1F,KAAK4jB,cAAgB,SAAUne,MAAOC,SAClC,IAAI/D,OAEJ,GAAI8D,QAAUrC,WAAaqC,QAAU,KAAM,CACvC,OAAOA,MAGX,GAAIA,iBAAiB1B,MAAO,CACxB,IAAI8f,eACJ,IAAK,IAAI1T,EAAI,EAAGA,EAAI1K,MAAMtC,OAAQgN,IAAK,CACnC0T,YAAY1T,GAAKnQ,KAAK4jB,cAAcne,MAAM0K,GAAIzK,SAElD,OAAOme,YAGX,IACI,OAAQne,QAAQ8T,eAChB,IAAK,OACL,IAAK,WACD,UAAW/T,QAAU,SAAU,CAC3B9D,OAAS8D,WAER,GAAIA,iBAAiByE,KAAM,CAC5BvI,OAAS3B,KAAK8jB,aAAare,MAAOC,QAAQ8T,mBAEzC,CACD,MAAM,IAAI/Y,MAAM,yBAA2BiF,QAAQ8T,cAAgB,KAEvE,MACJ,QACI7X,OAAS8D,MACT,OAGR,MAAO5G,GACH,MAAM,IAAI4B,MAAM8J,IAAIyF,WAAW,aAC3B,qCAAuCvK,MAAQ,KAAO5G,EAAE6E,UAGhE,OAAO/B,QAKX3B,KAAK8jB,aAAe,SAAUre,MAAOC,SACjC,IAAI/D,OAAS8D,MAIb,GAAIC,UAAY,QAAUA,UAAY,WAAY,CAC9C/D,OAAUlC,SAASE,KAAK2I,KAAK7C,MAAMyD,cAAe,GAAK,IAC7CzJ,SAASE,KAAK2I,KAAK7C,MAAMwD,WAAa,GAAK,IAC3CxJ,SAASE,KAAK2I,KAAK7C,MAAMuD,WAEnC,GAAItD,UAAY,WAAY,CACxB/D,OAAUA,OAAS,IACdlC,SAASE,KAAK2I,KAAK7C,MAAM0D,YAAc,IACvC1J,SAASE,KAAK2I,KAAK7C,MAAM2D,cAAgB,IACzC3J,SAASE,KAAK2I,KAAK7C,MAAM4D,cAAgB,IACzC5J,SAASE,KAAK2I,KAAK7C,MAAM6D,kBAAmB,IAIzD,OAAO3H,QAIX3B,KAAKujB,wBAA0B,SAAU7d,SAErC,IAAIqe,gBAAkB,MAEtB,OAAQre,QAAQ8T,eAChB,IAAK,OACL,IAAK,WACDuK,gBAAmB,KACnB,MAGJ,OAAOA,iBAKX/jB,KAAKgkB,oBAAsB,WAEvB,IAAK,IAAI5F,OAAOpe,KAAK4V,SAAU,CAC3B5V,KAAK4V,SAASwI,KAAK/J,WAAW,QAOtCrU,KAAKikB,YAAc,SAAUC,WACzB,IAAI5E,SACAnf,QACA+B,QAEJ,IACI,GAAIgiB,YAAc9gB,UAAW,CACzB8gB,UAAY,WAEX,UAAU,WAAe,UAAW,CACrC,MAAM,IAAIzjB,MAAM8J,IAAIyF,WAAW,aAAc,OAAQ,kBAIzDhQ,KAAKid,WAAaiH,UAKlBlkB,KAAKmkB,sCAGL,IAAMnkB,KAAK2S,cAAgB3S,KAAKid,YAAcjd,KAAKkd,iBAAkB,CAGjE,MAAM,IAAIzc,MAAM8J,IAAIyF,WAAW,eAInChQ,KAAKqjB,wBAGLrjB,KAAKqhB,aAAa,MAGlBrhB,KAAKuhB,uBAAuBne,WAE5BlB,SACI0O,KAAM5Q,MAGVA,KAAK6D,QAAQ,oBAAqB7D,KAAMkC,SAExC,GAAIgiB,UAAW,CAIX/jB,QAAUH,KAAKokB,sBAAsBliB,cAEpC,GAAIlC,KAAK2S,aAAc,CACxBxS,QAAUH,KAAKqkB,yBAEd,CACDlkB,QAAUH,KAAKskB,oBAErB,MAAOvlB,OACL,GAAIU,SAASE,KAAKI,SAASM,kBAAmB,CAC1C,MAAMtB,UACH,CACHugB,SAAW,IAAI7f,SAASE,KAAKI,SAC7BI,QAAUmf,SAASnf,UACnBmf,SAAS1e,OAAOZ,KAAM,OAClB+iB,YAAahkB,SAIzB,OAAOoB,SAcXH,KAAKmkB,oCAAsC,WACvC,IAAII,cAAgB,MAChBC,cAAgB,MAChBC,cAAgB,MAChBrG,IACAnZ,SAEJ,IAAKjF,KAAK4c,oBAAsB5c,KAAK2c,oBAAqB,CACtD,MAAM,IAAIlc,MAAM8J,IAAIyF,WAAW,eAInC,GAAIhQ,KAAKid,WAAY,CACjB,IAAKjd,KAAK2c,oBAAqB,CAE3B,MAAM,IAAIlc,MAAM8J,IAAIyF,WAAW,aAAc,eAE5C,CACD,QAIR,IAAKhQ,KAAKkS,UAAW,CAGjB,OAIJ,IAAKkM,OAAOpe,KAAK4V,SAAU,CAEvB3Q,SAAWjF,KAAK4V,SAASwI,KAEzB,IAAKmG,eAAiBtf,SAASyM,SAASvO,OAAS,EAAG,CAChDnD,KAAK0kB,wBAAyBjlB,SAASC,KAAKqC,KAAKwZ,YACjDgJ,cAAgB,KAGpB,IAAKC,eAAiBvf,SAASuM,OAAOrO,OAAS,EAAG,CAC9CnD,KAAK0kB,wBAAyBjlB,SAASC,KAAKqC,KAAKsZ,YACjDmJ,cAAgB,KAGpB,IAAKC,eAAiB/c,OAAO2L,KAAKpO,SAASwM,UAAUtO,OAAS,EAAG,CAC7DnD,KAAK0kB,wBAAyBjlB,SAASC,KAAKqC,KAAKuZ,YACjDmJ,cAAgB,KAGpB,GAAKF,eAAiBC,eAAiBC,cAAgB,CACnD,SAQZzkB,KAAK0kB,wBAA0B,SAAS9hB,WACpC,IAAIsgB,aAAepZ,wBAAwBlH,WAC3C,UAAW5C,KAAKkS,UAAU6L,QAAQmF,gBAAmB,WAAY,CAE7D,MAAM,IAAIziB,MAAM8J,IAAIyF,WAAW,aAAckT,aAAa1J,kBAIlExZ,KAAK2kB,OAAS,SAAUtgB,KAAMhD,QAC1B,IAAIie,SAAUnf,QAEd,IACI,IAAI+B,QAAUlC,KAAKqE,MAAMhD,QACzB,GAAIa,QAAQod,SAAU,CAClBA,SAAWpd,QAAQod,SACnBnf,QAAU+B,QAAQod,SAASnf,WAEjC,MAAOpB,OACL,GAAIU,SAASE,KAAKI,SAASM,kBAAmB,CAC1C,MAAMtB,UACH,CACH,IAAKugB,SAAU,CACXA,SAAW,IAAI7f,SAASE,KAAKI,SAC7BI,QAAUmf,SAASnf,UAEvBmf,SAAS1e,OAAOZ,KAAM,OAClB+iB,YAAahkB,SAIzB,OAAOoB,SAWXH,KAAK4kB,cAAgB,SAAUhiB,UAAWqC,SAAU9C,OAChD,IAAI0iB,QACAC,YACAvS,WACAwS,cAEJ,GAAI9f,SAASgM,SAAU,OACvBhM,SAASgM,SAAW,KAGpB,IAAK9O,MAAO,CACRA,OACI4a,oBAED,IAAK5a,MAAM4a,WAAY,CAC1B5a,MAAM4a,cAKV,OAAQna,WACR,KAAKnD,SAASC,KAAKqC,KAAKsZ,WACpB,IAAK,IAAIlL,EAAI,EAAGA,EAAIlL,SAASuM,OAAOrO,OAAQgN,IAAK,CAC7C,IAAI4B,GAAK9M,SAASuM,OAAOrB,GACzB,IAAI8C,SAAWhO,SAASqO,UAAUvB,GAAI,OAEtC,IAAKkB,SAAU,SACf,GAAIhO,SAAS+L,WAAWe,IAAK,SAC7B9M,SAAS+L,WAAWe,IAAMkB,SAASvT,KAEnCmlB,WACAtS,cAGAtN,SAAS2B,MAAM+M,YAAY1O,SAAUgO,SAASvT,KAAMmlB,SAEpD,GAAI7kB,KAAKmf,YAAa,CAClB5M,WAAWvS,KAAK2S,iBAChBoS,cAAgBxS,WAAWvS,KAAK2S,cAChC,GAAI3S,KAAKglB,gBAAgB,UAAW,CAChCD,cAAc,oBAAsB,KACpCA,cAAc9f,SAAS0B,UAKvBke,QAAQ,kBAAoB,UAC5BA,QAAQ,kBAAoB5R,SAASvT,KAAKuS,WAEnC4S,QAAQ,OAEfE,cAAc9f,SAAS0B,OAAOhD,KAAKkhB,aAElC,CACDE,cAAc9f,SAAS0B,UACvBoe,cAAc9f,SAAS0B,OAAOhD,KAAKkhB,cAGtC,CACDtS,WAAasS,QAIjB,IAAI3iB,SACAU,UAAWA,UACXT,MAAOA,MACP8Q,SAAUA,SACVrC,KAAM5Q,MAEVmC,MAAM4a,WAAWpZ,KAAKzB,SAEtB+Q,SAASW,UAAU/P,QAAQ,eAAgB7D,KAAMiT,SAAU/Q,SAC3DlC,KAAK6D,QAAQ,eAAgB7D,KAAMiT,SAAU/Q,SAE7ClC,KAAKgjB,sBACDvjB,SAASC,KAAKqC,KAAKsZ,WAAY9I,WAAYrQ,QAASlC,KAAKilB,gBACzDjlB,KAAKklB,eAAgBllB,KAAKmlB,cAElC,MACJ,KAAK1lB,SAASC,KAAKqC,KAAKuZ,WACpB,IAAK,IAAIvJ,MAAM9M,SAASwM,SAAU,CAC9B,IAAIwB,SAAWhO,SAASqO,UAAUvB,GAAI,OAEtC,IAAKkB,SAAU,SACf,GAAIhO,SAAS+L,WAAWe,IAAK,SAC7B9M,SAAS+L,WAAWe,IAAMkB,SAASvT,KAEnCmlB,WACAtS,cACAuS,eAGA7f,SAAS2B,MAAM+M,YAAY1O,SAAUgO,SAASvT,KAAMmlB,SAEpD,IAAIO,qBAAuB,MAC3B,GAAIplB,KAAKmf,YAAa,CAClB,GAAInf,KAAKglB,gBAAgB,UAAW,CAChCI,qBAAuB,KACvB7S,WAAWvS,KAAK2S,iBAChBoS,cAAgBxS,WAAWvS,KAAK2S,cAChCoS,cAAc,oBAAsB,KACpCA,cAAc9f,SAAS0B,UAGvBke,QAAQ,YAAc5R,SAASvT,KAAKuS,IACpC4S,QAAQ,kBAAoB,WAC5BA,QAAQ,kBAAoB5R,SAASvT,KAAKuS,WACnC4S,QAAQ,OAEfE,cAAc9f,SAAS0B,OAAOhD,KAAKkhB,SAGnCE,cAAc,mBACd,IAAIM,aAAeN,cAAc,gBACjCM,aAAapgB,SAAS0B,UAEtB,IAAI2e,iBAEJA,cAAc,YAAcrS,SAASvT,KAAKuS,IAE1ChN,SAAS2B,MAAM+M,YAAY1O,SACvBA,SAASsM,aAAa0B,SAASvT,KAAKuS,KAAMqT,sBACvCA,cAAc,OAErBD,aAAapgB,SAAS0B,OAAOhD,KAAK2hB,gBAI1C,IAAKF,qBAAsB,CACvB,GAAIplB,KAAKkS,UAAUgM,SACRle,KAAKkS,UAAUgM,QAAQsC,UACvBxgB,KAAKkS,UAAUgM,QAAQsC,SAAS+E,gBAAiB,CACxDtgB,SAAS2B,MAAM+M,YAAY1O,SAAUgO,SAASvT,KAAMolB,YAChD7f,SAASsM,aAAa0B,SAASvT,KAAKuS,MAExC,GAAIjS,KAAKkS,UAAUF,WAAY,CAC3B8S,YAAY9kB,KAAKkS,UAAUF,YACnBiB,SAASvT,KAAKM,KAAKkS,UAAUF,gBAEpC,CACD,MAAM,IAAIvR,MAAM8J,IAAIyF,WAAW,aAAchQ,KAAKkS,UAAU7N,KACxD,wCAIRygB,YAAcD,QAElB,GAAI7kB,KAAKmf,YAAa,CAClB5M,WAAWvS,KAAK2S,iBAChBoS,cAAgBxS,WAAWvS,KAAK2S,cAChCoS,cAAc9f,SAAS0B,UACvBoe,cAAc9f,SAAS0B,OAAOhD,KAAKmhB,iBAElC,CACDvS,WAAasS,SAIrB,IAAI3iB,SACA+Q,SAAUA,SACVrQ,UAAWA,UACXT,MAAOA,MACPyO,KAAM5Q,MAEVmC,MAAM4a,WAAWpZ,KAAKzB,SAEtB+Q,SAASW,UAAU/P,QAAQ,eAAgB7D,KAAMiT,SAAU/Q,SAC3DlC,KAAK6D,QAAQ,eAAgB7D,KAAMiT,SAAU/Q,SAE7ClC,KAAKgjB,sBACDvjB,SAASC,KAAKqC,KAAKuZ,WAAY/I,WAAYrQ,QAASlC,KAAKwlB,gBACzDxlB,KAAKylB,eAAgBzlB,KAAK0lB,cAElC,MAIJ,IAAK,IAAIvV,EAAI,EAAGA,EAAIlL,SAAS0Q,UAAUxS,OAAQgN,IAAK,CAChD,IAAIwV,eAAiB1gB,SAAS0Q,UAAUxF,GACxCnQ,KAAK4kB,cACDhiB,UAAW5C,KAAK4V,SAAS+P,gBAAiBxjB,OAMlD,GAAIS,WAAanD,SAASC,KAAKqC,KAAKwZ,WAAY,CAC5C,IAAK,IAAIpL,EAAI,EAAGA,EAAIlL,SAASyM,SAASvO,OAAQgN,IAAK,CAC/C,IAAI4B,GAAK9M,SAASyM,SAASvB,GAAG8B,IAC9B,IAAIgB,SAAWhO,SAASyM,SAASvB,GAEjC,IAAK8C,SAAU,SACfhO,SAAS+L,WAAWe,IAAMkB,SAASvT,KAEnCmlB,WACAtS,cACAuS,eAGA7f,SAAS2B,MAAM+M,YAAY1O,SAAUgO,SAASvT,KAAMmlB,SAEpD,IAAIO,qBAAuB,MAC3B,GAAIplB,KAAKmf,YAAa,CAClB,GAAInf,KAAKglB,gBAAgB,UAAW,CAChCI,qBAAuB,KACvB7S,WAAWvS,KAAK2S,iBAChBoS,cAAgBxS,WAAWvS,KAAK2S,cAChCoS,cAAc,oBAAsB,KAGpCA,cAAc,mBACd,IAAIM,aAAeN,cAAc,gBACjCM,aAAapgB,SAAS0B,UAEtB,IAAI2e,iBAIJA,cAAc,kBAAoB,UAClCA,cAAc,kBAAoBrS,SAASvT,KAAKuS,IAEhDhN,SAAS2B,MAAM+M,YAAY1O,SACvBA,SAASsM,aAAasT,QAAQ5S,KAAMqT,eACxCD,aAAapgB,SAAS0B,OAAOhD,KAAK2hB,gBAI1C,IAAKF,qBAAsB,CACvB,GAAIplB,KAAKkS,UAAUgM,SACZle,KAAKkS,UAAUgM,QAAQsC,UACvBxgB,KAAKkS,UAAUgM,QAAQsC,SAAS+E,gBAAiB,CACpD,GAAIvlB,KAAKkS,UAAUF,WAAY,CAC3B8S,YAAY9kB,KAAKkS,UAAUF,YACvBiB,SAASvT,KAAKM,KAAKkS,UAAUF,gBAEhC,CACD,MAAM,IAAIvR,MAAM8J,IAAIyF,WAAW,aAAchQ,KAAKkS,UAAU7N,KACxD,uCAGP,CACDygB,YAAcD,QAGlB,GAAI7kB,KAAKmf,YAAa,CAClB5M,WAAWvS,KAAK2S,iBAChBoS,cAAgBxS,WAAWvS,KAAK2S,cAChCoS,cAAc9f,SAAS0B,UACvBoe,cAAc9f,SAAS0B,OAAOhD,KAAKmhB,iBAElC,CACDvS,WAAasS,SAIrB,IAAI3iB,SACAC,MAAOA,MACP8Q,SAAUA,SACVrQ,UAAWA,UACXgO,KAAM5Q,MAGVmC,MAAM4a,WAAWpZ,KAAKzB,SAEtB+Q,SAASW,UAAU/P,QAAQ,eAAgB7D,KAAMiT,SAAU/Q,SAC3DlC,KAAK6D,QAAQ,eAAgB7D,KAAMiT,SAAU/Q,SAE7ClC,KAAKgjB,sBACDvjB,SAASC,KAAKqC,KAAKwZ,WAAYhJ,WAAYrQ,QAASlC,KAAK4lB,gBACzD5lB,KAAK6lB,eAAgB7lB,KAAK8lB,iBAS1C9lB,KAAKglB,gBAAkB,SAAUe,QAE7B,IAAK,IAAI5gB,IAAM,EAAGA,IAAMnF,KAAKkS,UAAU6K,WAAW5Z,OAAQgC,MAAO,CAC7D,GAAInF,KAAKkS,UAAU6K,WAAW5X,KAAKG,MAAQygB,OAAQ,CAC/C,OAAO/lB,KAAKkS,UAAU6K,WAAW5X,KAAK6gB,gBAI9C,OAAO,OASXhmB,KAAKqkB,mBAAqB,WACtB,IAAIliB,OACI4a,eAEJuC,SACAnf,QAEJmf,SAAW,IAAI7f,SAASE,KAAKI,SAC7BI,QAAUmf,SAASnf,UACnBgC,MAAMmd,SAAWA,SAIjB,IAAK,IAAIlB,OAAOpe,KAAK4V,SAAU,CAC3B5V,KAAK4V,SAASwI,KAAKnN,SAAW,MAElC,IAAK,IAAImN,OAAOpe,KAAK4V,SAAU,CAC3B,IAAI3Q,SAAWjF,KAAK4V,SAASwI,KAC7Bpe,KAAK4kB,cACDnlB,SAASC,KAAKqC,KAAKwZ,WAAYtW,SAAU9C,OAIjD,IAAK,IAAIic,OAAOpe,KAAK4V,SAAU,CAC3B5V,KAAK4V,SAASwI,KAAKnN,SAAW,MAElC,IAAK,IAAImN,OAAOpe,KAAK4V,SAAU,CAC3B,IAAI3Q,SAAWjF,KAAK4V,SAASwI,KAC7Bpe,KAAK4kB,cACDnlB,SAASC,KAAKqC,KAAKsZ,WAAYpW,SAAU9C,OAIjD,IAAK,IAAIic,OAAOpe,KAAK4V,SAAU,CAC3B5V,KAAK4V,SAASwI,KAAKnN,SAAW,MAElC,IAAK,IAAImN,OAAOpe,KAAK4V,SAAU,CAC3B,IAAI3Q,SAAWjF,KAAK4V,SAASwI,KAC7Bpe,KAAK4kB,cACDnlB,SAASC,KAAKqC,KAAKuZ,WAAYrW,SAAU9C,OAGjD,GAAInC,KAAKkd,iBAAkB,CACvB,IAAK,IAAIkB,OAAOpe,KAAK4V,SAAU,CAC3B,IAAI3Q,SAAWjF,KAAK4V,SAASwI,KAC7BnZ,SAAS+L,cACT/L,SAASuM,UACTvM,SAASwM,YACTxM,SAASyM,aAQjB,IAAK1R,KAAK8c,QAAW3a,MAAM4a,YAAc5a,MAAM4a,WAAW5Z,SAAW,EAAI,CACrE,GAAInD,KAAKimB,iBAAiB9jB,OAAQ,CAC9B,IAAIH,QAAUhC,KAAKkmB,gBAAgB/jB,OACnC,IAAID,SACAC,MAAOA,MACPH,QAASA,SAEbhC,KAAKgkB,sBAGLhkB,KAAK2R,eACL,IAAK3P,SAAWG,MAAM4a,WAAY,CAC9B/c,KAAKmmB,kBAAkBnmB,KAAMmC,MAAO,MAExCnC,KAAKuhB,uBAAuBpf,OAE5BnC,KAAKomB,sBAAsBpkB,QAASE,UAK5C,OAAO/B,SAOXH,KAAKskB,iBAAmB,WACpB,IAAIhF,SAAUnf,QACd,IAAKH,KAAKsY,iBAAkB,OAC5B,IAAIrT,SAAWjF,KAAKsY,iBAEpB,IAAInW,OACA4a,eAGJuC,SAAW,IAAI7f,SAASE,KAAKI,SAC7BI,QAAUmf,SAASnf,UACnBgC,MAAMmd,SAAWA,SAEjB,IAAI+G,qBAAuB,MAI3B,IAAIC,gBACJ,IAAK,IAAInW,EAAI,EAAGA,EAAIlL,SAASuM,OAAOrO,OAAQgN,IAAK,CAC7C,IAAI4B,GAAK9M,SAASuM,OAAOrB,GACzBmW,aAAavU,IAAMA,GAEvB,IAAK,IAAI5B,EAAI,EAAGA,EAAIlL,SAASyM,SAASvO,OAAQgN,IAAK,CAC/C,IAAI8C,SAAWhO,SAASyM,SAASvB,GACjC,IAAK8C,SAAU,SAEf,IAAIlB,GAAKkB,SAASvT,KAAKuS,IACvB,GAAIqU,aAAavU,IAAK,CAIlB,IAAI7P,SACAF,QAAS,KACTC,IAAKmB,UACLR,UAAWnD,SAASC,KAAKqC,KAAKwZ,WAC9BpZ,MAAOA,MACP8Q,SAAUA,SACVrC,KAAM5Q,MAEVmC,MAAM4a,WAAWpZ,KAAKzB,SACtB+C,SAAS+L,WAAWe,IAAMkB,SAASvT,KAEnC,IAAIkR,KAAO1O,QAAQ0O,KACnB,IACI1O,QAAQ+Q,SAASW,UAAU/P,QAAQ,cAAe+M,KAAM1O,QAAQ+Q,SAC5D/Q,QAAQF,QAASE,SACrB0O,KAAK/M,QAAQ,cAAe+M,KAAM1O,QAAQ+Q,SAAU/Q,QAAQF,QAASE,SACvE,QACEA,QAAQqkB,SAAW,KAGvBF,qBAAuB,MAG/BC,aAAe,KAGf,IAAK,IAAInW,EAAI,EAAGA,EAAIlL,SAASyM,SAASvO,OAAQgN,IAAK,CAC/C,IAAI8C,SAAWhO,SAASyM,SAASvB,GACjC,IAAK8C,SAAU,SAEf,IAAIlB,GAAKkB,SAASvT,KAAKuS,IACvB,GAAIhN,SAAS+L,WAAWe,IAAK,SAE7B9M,SAAS+L,WAAWe,IAAMkB,SAASvT,KACnC2mB,qBAAuB,MAEvB,IAAIpkB,IAAM,IAAItD,eACdsD,IAAI2O,KAAO5Q,KAEX,IAAIkC,SACAD,IAAKA,IACLW,UAAWnD,SAASC,KAAKqC,KAAKwZ,WAC9BpZ,MAAOA,MACP8Q,SAAUA,SACVrC,KAAM5Q,MAEVmC,MAAM4a,WAAWpZ,KAAKzB,SACtBD,IAAIie,aAAelgB,KAAK4lB,gBACxB3jB,IAAIke,YAAcngB,KAAK6lB,eACvB5jB,IAAIme,UAAYpgB,KAAK8lB,aACrB7jB,IAAIoe,mBAAqBrgB,KAAKsgB,0BAC9Bre,IAAIC,QAAUA,QAEd+Q,SAASW,UAAU/P,QAAQ,eAAgB7D,KAAMiT,SAAU/Q,SAC3DlC,KAAK6D,QAAQ,eAAgB7D,KAAMiT,SAAU/Q,SAE7C,IAAI4iB,eACJ,GAAI9kB,KAAKkS,UAAUgM,SACZle,KAAKkS,UAAUgM,QAAQsC,UACvBxgB,KAAKkS,UAAUgM,QAAQsC,SAAS+E,gBAAiB,CACpD,GAAIvlB,KAAKkS,UAAUF,WAAY,CAC3B8S,YAAY9kB,KAAKkS,UAAUF,YAAciB,SAASvT,KAAKM,KAAKkS,UAAUF,gBAErE,CACD,MAAM,IAAIvR,MAAM8J,IAAIyF,WAAW,aAAchQ,KAAKkS,UAAU7N,KACxD,uCAGP,CAEDY,SAAS2B,MAAM+M,YAAY1O,SAAUgO,SAASvT,KAAMolB,aAGxD,GAAI7f,SAAS2M,kBAAmB,CAC5B5R,KAAK2jB,gBAAgB1e,SAAU6f,aAGnC,GAAI9kB,KAAKkS,UAAW,CAChB,UAAWlS,KAAKkS,UAAU6L,QAAQ,WAAc,WAAY,CACxD9b,IAAI+f,SAAW8C,YACf9kB,KAAKkS,UAAU6L,QAAQ,UAAU9Z,KAAKjE,KAAMiC,IAAKjC,KAAK8c,YAErD,CACD,MAAM,IAAIrc,MAAM,+CAGnB,CACDT,KAAKgd,SAASyD,aAAaxe,IAAK,SAAUjC,KAAK0d,IAAM,IAAM3L,GAAI,MAC/D,IACI9P,IAAI8d,KAAK,MACX,MAAOlhB,GACLqD,QAAQF,QAAU,MAClBE,QAAQ8d,UAAYnhB,EAEpBoD,IAAI2O,KAAKoM,SAASiD,sBAAsBhe,IAAKC,QAAQF,QAASE,WAO1E,IAAK,IAAIiO,EAAI,EAAGA,EAAIlL,SAASuM,OAAOrO,OAAQgN,IAAK,CAC7C,IAAI4B,GAAK9M,SAASuM,OAAOrB,GACzB,IAAI8C,SAAWhO,SAASqO,UAAUvB,GAAI,OACtC,IAAI+S,eAEJ,IAAK7R,SAAU,SACf,GAAIhO,SAAS+L,WAAWe,IAAK,SAC7B9M,SAAS+L,WAAWe,IAAMkB,SAASvT,KACnC2mB,qBAAuB,MAEvB,IAAIpkB,IAAM,IAAItD,eACdsD,IAAI2O,KAAO5Q,KACX,IAAIkC,SACAD,IAAKA,IACLgR,SAAUA,SACV9Q,MAAOA,MACPS,UAAWnD,SAASC,KAAKqC,KAAKsZ,WAC9BzK,KAAM5Q,MAEVmC,MAAM4a,WAAWpZ,KAAKzB,SACtBD,IAAIie,aAAelgB,KAAKilB,gBACxBhjB,IAAIke,YAAcngB,KAAKklB,eACvBjjB,IAAIme,UAAYpgB,KAAKmlB,aACrBljB,IAAIoe,mBAAqBrgB,KAAKsgB,0BAC9Bre,IAAIC,QAAUA,QAEd+Q,SAASW,UAAU/P,QAAQ,eAAgB7D,KAAMiT,SAAU/Q,SAC3DlC,KAAK6D,QAAQ,eAAgB7D,KAAMiT,SAAU/Q,SAE7C,GAAIlC,KAAKkS,UAAW,CAChB,UAAWlS,KAAKkS,UAAU6L,QAAc,QAAK,WAAY,CACrD/d,KAAK2T,YAAY1O,SAAUgO,SAASvT,KAAMolB,aAC1C,GAAI9kB,KAAKkS,UAAUF,aAAe5O,WAAa6P,SAASvT,KAAKuS,MAAQ7O,UAAW,QAErE0hB,YAAY7S,IAGvB,GAAIhN,SAAS2M,kBAAmB,CAC5B5R,KAAK2jB,gBAAgB1e,SAAU6f,aAGnC7iB,IAAI+f,SAAW8C,YAEf9kB,KAAKkS,UAAU6L,QAAQ1H,OAAOpS,KAAKjE,KAAMiC,IAAKjC,KAAK8c,YAElD,CACD,MAAM,IAAIrc,MAAM,+CAInB,CACDT,KAAKgd,SAASyD,aAAaxe,IAAK,OAAQjC,KAAK0d,IAAK,MAClDzb,IAAI6d,iBAAiB,eAAgB,mCACrC9f,KAAK2T,YAAY1O,SAAUgO,SAASvT,KAAMolB,aAE1C,GAAI7f,SAAS2M,kBAAmB,CAC5B5R,KAAK2jB,gBAAgB1e,SAAU6f,aAEnC,IAAIjF,MAAQrb,KAAKC,UAAUqgB,aAE3B,IACI7iB,IAAI8d,KAAKF,OACX,MAAOhhB,GACLqD,QAAQF,QAAU,MAClBE,QAAQ8d,UAAYnhB,EAEpBoD,IAAI2O,KAAKoM,SAASiD,sBAAsBhe,IAAKC,QAAQF,QAASE,WAO1E,IAAK,IAAI6P,MAAM9M,SAASwM,SAAU,CAC9B,IAAIwB,SAAWhO,SAASqO,UAAUvB,GAAI,OAEtC,IAAKkB,SAAU,SACf,GAAIhO,SAAS+L,WAAWe,IAAK,SAC7B9M,SAAS+L,WAAWe,IAAMkB,SAASvT,KACnC2mB,qBAAuB,MAEvB,IAAIpkB,IAAM,IAAItD,eACd,IAAIuD,SACAD,IAAKA,IACLgR,SAAUA,SACVrQ,UAAWnD,SAASC,KAAKqC,KAAKuZ,WAC9BnZ,MAAOA,MACPyO,KAAM5Q,MAEViC,IAAIC,QAAUA,QACdD,IAAI2O,KAAO5Q,KACXmC,MAAM4a,WAAWpZ,KAAKzB,SACtBD,IAAIie,aAAelgB,KAAKwlB,gBACxBvjB,IAAIke,YAAcngB,KAAKylB,eACvBxjB,IAAIme,UAAYpgB,KAAK0lB,aACrBzjB,IAAIoe,mBAAqBrgB,KAAKsgB,0BAE9BrN,SAASW,UAAU/P,QAAQ,eAAgB7D,KAAMiT,SAAU/Q,SAC3DlC,KAAK6D,QAAQ,eAAgB7D,KAAMiT,SAAU/Q,SAE7C,IAAI4iB,eACJ,GAAI9kB,KAAKkS,UAAUgM,SACZle,KAAKkS,UAAUgM,QAAQsC,UACvBxgB,KAAKkS,UAAUgM,QAAQsC,SAAS+E,gBAAiB,CAEpDtgB,SAAS2B,MAAM+M,YAAY1O,SAAUgO,SAASvT,KAAMolB,YAChD7f,SAASsM,aAAa0B,SAASvT,KAAKuS,MAExC,GAAIjS,KAAKkS,UAAUF,WAAY,CAC3B8S,YAAY9kB,KAAKkS,UAAUF,YAAciB,SAASvT,KAAKM,KAAKkS,UAAUF,gBAErE,CACD,MAAM,IAAIvR,MAAM8J,IAAIyF,WAAW,aAAchQ,KAAKkS,UAAU7N,KACxD,uCAGP,CAEDY,SAAS2B,MAAM+M,YAAY1O,SAAUgO,SAASvT,KAAMolB,aAGxD,GAAI7f,SAAS2M,kBAAmB,CAC5B5R,KAAK2jB,gBAAgB1e,SAAU6f,aAGnC,GAAI9kB,KAAKkS,UAAW,CAChB,UAAWlS,KAAKkS,UAAU6L,QAAc,QAAK,WAAY,CACrD9b,IAAI+f,SAAW8C,YACf9kB,KAAKkS,UAAU6L,QAAQvF,OAAOvU,KAAKjE,KAAMiC,IAAKjC,KAAK8c,YAElD,CACD,MAAM,IAAIrc,MAAM,+CAGnB,CACDT,KAAKgd,SAASyD,aAAaxe,IAAK,MAAOjC,KAAK0d,IAAM,IAAM3L,GAAI/R,KAAK8c,QACjE7a,IAAI6d,iBAAiB,eAAgB,mCAErC,IAAID,MAAQrb,KAAKC,UAAUqgB,aAE3B,IACI7iB,IAAI8d,KAAKF,OACX,MAAOhhB,GACLqD,QAAQF,QAAU,MAClBE,QAAQ8d,UAAYnhB,EAEpBoD,IAAI2O,KAAKoM,SAASiD,sBAAsBhe,IAAKC,QAAQF,QAASE,WAK1E,GAAIlC,KAAKkd,iBAAkB,CAEvBjY,SAASuM,UACTvM,SAASwM,YACTxM,SAASyM,YACTzM,SAAS+L,cAIb,IAAKhR,KAAK8c,OACNuJ,qBAAuB,KAE3B,GAAIA,qBAAsB,CACtB,IAAIzV,KAAO5Q,KACX,IAAIkC,SACAC,MAAOA,MACPH,QAAS,MAIb4O,KAAKe,eACL,GAAIxP,MAAM4a,WAAY,CAClBnM,KAAKuV,kBAAkBvV,KAAMzO,MAAO,MAGxCyO,KAAKoT,sBACLpT,KAAKwV,sBAAsBlkB,QAAQF,QAASE,SAGhD,OAAO/B,SASXH,KAAKokB,sBAAwB,SAAUliB,SACnC,IAAIod,SACAnf,QACAoS,WACAiU,WAAaxmB,KAAKymB,qBAClBC,UAAY1mB,KAAK2mB,oBACjBC,QAAW5mB,KAAK6mB,kBAEpBvH,SAAW,IAAI7f,SAASE,KAAKI,SAC7BI,QAAUmf,SAASnf,UACnB+B,QAAQod,SAAWA,SAEnBpd,QAAQ4kB,aAIR,GAAK9mB,KAAK2S,aAAe,CACrBJ,WAAavS,KAAK+mB,iBAAiB/mB,KAAK2S,aAAc,MAAOzQ,aAE5D,CAGDqQ,WAAavS,KAAKgnB,mBAAmBhnB,KAAKsY,iBAAkBpW,SAC5DwkB,UAAY1mB,KAAKinB,sBAGrBjnB,KAAKgjB,sBAAsBvjB,SAASC,KAAKqC,KAAKqhB,WAAY7Q,WAAYrQ,QAClEskB,WAAYE,UAAWE,SAE3B,OAAOzmB,SAYXH,KAAK+mB,iBAAmB,SAAUG,YAAaC,kBAAmBjlB,SAC9D,IAAIklB,uBAEJA,oBAAoBF,gBACpB,IAAIG,kBAAoBD,oBAAoBF,aAE5C,IAAIhM,WAAamM,kBAAkB,oBAAsBrnB,KAAKsnB,cAC9D,GAAIpM,WAAY,CACZ,GAAKiM,oBAAsB,KAAO,CAC9B,IAAK,IAAI/I,OAAOpe,KAAK4V,SAAU,CAC3ByR,kBAAkBrnB,KAAK4V,SAASwI,KAAKzX,WAM7C,IAAK,IAAIyX,OAAOpe,KAAK4V,SAAU,CAC3B,IAAI3Q,SAAWjF,KAAK4V,SAASwI,KAC7Bpe,KAAKunB,uBAAuBtiB,SAAUoiB,kBAAmBnlB,SAK7D,IAAK,IAAIkc,OAAOpe,KAAK4V,SAAU,CAC3B,IAAI3Q,SAAWjF,KAAK4V,SAASwI,KAC7Bpe,KAAKwnB,uBAAuBviB,SAAUoiB,kBAAmBnlB,SAK7D,IAAK,IAAIkc,OAAOpe,KAAK4V,SAAU,CAC3B,IAAI3Q,SAAWjF,KAAK4V,SAASwI,KAC7Bpe,KAAKynB,uBAAuBxiB,SAAUoiB,kBAAmBnlB,SAI7D,IAAK,IAAIkc,OAAOpe,KAAK4V,SAAU,CAC3B5V,KAAK4V,SAASwI,KAAKpN,eAO3B,IAAIqC,KAAO3L,OAAO2L,KAAK+T,oBAAoBF,cAC3C,GAAI7T,KAAKlQ,QAAU,GAAKkQ,KAAK,IAAM,mBAAoB,CACnD,IAAK,IAAI+K,OAAOpe,KAAK4V,SAAU,CAC3ByR,kBAAkBrnB,KAAK4V,SAASwI,KAAKzX,UAEzC0gB,kBAAkB,oBAAsB,MAG5C,OAAOD,qBAaXpnB,KAAKgnB,mBAAqB,SAAU/hB,SAAU/C,SAC1C,IAAIklB,uBACAlM,WACAwM,oBACAvX,EACA4B,GACAkB,SAEJmU,oBAAoBniB,SAAS0B,UAC7B+gB,oBAAsBN,oBAAoBniB,SAAS0B,OAEnDuU,WAAalb,KAAKsnB,cAClB,GAAIpM,WAAY,CAKZ,IAAK/K,EAAI,EAAGA,EAAIlL,SAASuM,OAAOrO,OAAQgN,IAAK,CACzC4B,GAAK9M,SAASuM,OAAOrB,GACrB8C,SAAWhO,SAASqO,UAAUvB,GAAI,OAClC,GAAIkB,SAAU,CACV,IAAMhO,SAAS+L,WAAWiC,SAASvT,KAAKuS,KAAO,CAC3CjS,KAAK2nB,qBAAqB1iB,SAAUgO,SAAUyU,oBAC1CxlB,QAAS,kBAMzB,IAAK6P,MAAM9M,SAASwM,SAAU,CAC1B,GAAIxM,SAASwM,SAASmW,eAAe7V,IAAK,CACtCkB,SAAWhO,SAASqO,UAAUvB,GAAI,OAClC,GAAIkB,SAAU,CACV,IAAMhO,SAAS+L,WAAWiC,SAASvT,KAAKuS,KAAO,CAC3CjS,KAAK2nB,qBAAqB1iB,SAAUgO,SAAUyU,oBAC1CxlB,QAAS,mBAO7B+C,SAAS+L,cAGb,OAAOoW,qBAGXpnB,KAAK2nB,qBAAuB,SAAU1iB,SAAUgO,SAAUyU,oBAAqBxlB,QAAS2lB,OACpF,IAAIhD,WAEJ5f,SAAS+L,WAAWiC,SAASvT,KAAKuS,KAAOgB,SAASvT,KAIlD,UAAU,SAAa,YAAa,CAChCwC,QAAQ4kB,UAAUnjB,KAAKsP,UAGvBA,SAASW,UAAU/P,QAAQgkB,MAAO7nB,KAAMiT,SAAU/Q,SAClDlC,KAAK6D,QAAQgkB,MAAO7nB,KAAMiT,SAAU/Q,SAGxC+C,SAAS2B,MAAM+M,YAAY1O,SAAUgO,SAASvT,KAAMmlB,gBAC7CA,QAAQ,OAEf6C,oBAAoB/jB,KAAKkhB,UAW7B7kB,KAAK8nB,wBAA0B,SAAUZ,aACrC,IAAI3U,cAEJA,WAAW2U,gBACX,IAAIG,kBAAoB9U,WAAW2U,aAInC,IAAK,IAAI9I,OAAOpe,KAAK4V,SACjByR,kBAAkBrnB,KAAK4V,SAASwI,KAAKzX,UAEzC,GAAI3G,KAAKsnB,cAAe,CACpBD,kBAAkB,oBAAsB,KAI5C,IAAK,IAAIjJ,OAAOpe,KAAK4V,SAAU,CAC3B,IAAI3Q,SAAWjF,KAAK4V,SAASwI,KAC7Bpe,KAAK+nB,oBAAoB9iB,SAAUoiB,mBAIvC,IAAK,IAAIjJ,OAAOpe,KAAK4V,SAAU,CAC3B,IAAI3Q,SAAWjF,KAAK4V,SAASwI,KAC7Bpe,KAAKunB,uBAAuBtiB,SAAUoiB,mBAI1C,IAAK,IAAIjJ,OAAOpe,KAAK4V,SAAU,CAC3B5V,KAAK4V,SAASwI,KAAKpN,cAEvB,OAAOuB,YAKXvS,KAAK+nB,oBAAsB,SAAU9iB,SAAUoiB,mBAE3C,GAAIpiB,SAASkM,MAAMhO,OAAS,IAAMkkB,kBAAkBpiB,SAAS0B,OACzD0gB,kBAAkBpiB,SAAS0B,UAE/B,IAAK,IAAIwJ,EAAI,EAAGA,EAAIlL,SAASkM,MAAMhO,OAAQgN,IAAK,CAC5C,IAAIe,OAASjM,SAASkM,MAAMhB,GAC5B,IAAKe,OAAQ,SAIb,GAAIlR,KAAKgoB,4BAA4B/iB,SAAUiM,OAAOe,OAAS,KAAM,CACjE,IAAIgB,SAAWhO,SAASqO,UAAUpC,OAAOe,IAAK,OAC9C,IAAKgB,SAAU,SACf,GAAIhO,SAAS+L,WAAWiC,SAASvT,KAAKuS,KAAM,SAC5CjS,KAAKioB,0BAA0BhjB,SAAUgO,SAAUoU,mBAEvD,GAAIrnB,KAAKkoB,4BAA4BjjB,SAAUiM,OAAOe,OAAS,KAAM,CACjE,IAAIgB,SAAWhO,SAASqO,UAAUpC,OAAOe,IAAK,OAC9C,IAAKgB,SAAU,SACf,GAAIhO,SAAS+L,WAAWiC,SAASvT,KAAKuS,KAAM,SAC5CjS,KAAKmoB,0BAA0BljB,SAAUgO,SAAUoU,uBAElD,CACD,GAAIpiB,SAAS+L,WAAWE,OAAOe,KAAM,SACrChN,SAAS+L,WAAWE,OAAOe,KAAOf,OAElC,IAAI2T,WAEJ5f,SAAS2B,MAAM+M,YAAY1O,SAAUiM,OAAQ2T,gBACtCA,QAAQ,OAEfwC,kBAAkBpiB,SAAS0B,OAAOhD,KAAKkhB,YAQnD7kB,KAAKgoB,4BAA8B,SAAU/iB,SAAU8M,IACnD,IAAK,IAAI5B,EAAI,EAAGA,EAAIlL,SAASuM,OAAOrO,OAAQgN,IAAK,CAC7C,GAAIlL,SAASuM,OAAOrB,KAAO4B,GACvB,OAAO,KAGf,OAAO,OAKX/R,KAAKkoB,4BAA8B,SAAUjjB,SAAU8M,IACnD,IAAK,IAAIqW,aAAanjB,SAASwM,SAAU,CACrC,GAAI2W,YAAcrW,GACd,OAAO,KAGf,OAAO,OAKX/R,KAAKsnB,YAAc,WACf,IAAIpM,WAAa,MAEjB,IAAK,IAAIkD,OAAOpe,KAAK4V,SAAU,CAC3B,IAAI3Q,SAAWjF,KAAK4V,SAASwI,KAE7B,IAAIiK,WAAa,MACjB,IAAK,IAAItW,MAAM9M,SAASwM,SAAU,CAC9B4W,WAAa,KACb,MAGJ,GAAIpjB,SAASyM,SAASvO,OAAS,GAAK8B,SAASuM,OAAOrO,OAAS,GAAKklB,WAAY,CAC1EnN,WAAa,KACb,OAIR,OAAOA,YAMXlb,KAAKunB,uBAAyB,SAAUtiB,SAAUoiB,kBAAmBnlB,SAEjE,IAAK,IAAIiO,EAAI,EAAGA,EAAIlL,SAASyM,SAASvO,OAAQgN,IAAK,CAC/C,IAAI8C,SAAWhO,SAASyM,SAASvB,GAEjC,IAAK8C,SAAU,SAEf,GAAIA,SAASvT,MACNuT,SAASvT,KAAKuS,MAAQ7O,WACtB6B,SAASsM,aAAa0B,SAASvT,KAAKuS,OAAS,KAAM,CAEtD,SAGJjS,KAAKsoB,0BAA0BrjB,SAAUgO,SAAUoU,kBAAmBnlB,WAI9ElC,KAAKsoB,0BAA4B,SAAUrjB,SAAUgO,SAAUoU,kBAAmBnlB,SAC9E+C,SAAS+L,WAAWiC,SAASvT,KAAKuS,KAAOgB,SAASvT,KAIlDuT,SAASvT,KAAK,kBAAoB,UAElC,UAAU,SAAa,YAAa,CAChCwC,QAAQ4kB,UAAUnjB,KAAKsP,UAGvBA,SAASW,UAAU/P,QAAQ,eAAgB7D,KAAMiT,SAAU/Q,SAC3DlC,KAAK6D,QAAQ,eAAgB7D,KAAMiT,SAAU/Q,SAGjD,IAAIojB,iBAEJA,cAAc,kBAAoBrS,SAASvT,KAAKuS,IAChDqT,cAAc,kBAAoB,UAElC,IAAIiD,sBAAwBvoB,KAAKwoB,4BAA4BnB,kBAAmBpiB,SAAS0B,OACzF1B,SAAS2B,MAAM+M,YAAY1O,SAAUA,SAASsM,aAAa0B,SAASvT,KAAKuS,KAAMqT,sBACxEA,cAAc,OAErBiD,sBAAsB5kB,KAAK2hB,gBAM/BtlB,KAAKwnB,uBAAyB,SAAUviB,SAAUoiB,kBAAmBnlB,SAEjE,IAAK,IAAIiO,EAAI,EAAGA,EAAIlL,SAASuM,OAAOrO,OAAQgN,IAAK,CAC7C,IAAI4B,GAAK9M,SAASuM,OAAOrB,GACzB,IAAI8C,SAAWhO,SAASqO,UAAUvB,GAAI,OACtC,IAAKkB,SAAU,SACf,GAAIhO,SAAS+L,WAAWiC,SAASvT,KAAKuS,KAAM,SAE5CjS,KAAKioB,0BAA0BhjB,SAAUgO,SAAUoU,kBAAmBnlB,WAI9ElC,KAAKioB,0BAA4B,SAAUhjB,SAAUgO,SAAUoU,kBAAmBnlB,SAC9E+C,SAAS+L,WAAWiC,SAASvT,KAAKuS,KAAOgB,SAASvT,KAElD,IAAK2nB,kBAAkBpiB,SAAS0B,OAAQ,CACpC0gB,kBAAkBpiB,SAAS0B,UAK/BsM,SAASvT,KAAK,kBAAoB,UAElC,UAAU,SAAa,YAAa,CAChCwC,QAAQ4kB,UAAUnjB,KAAKsP,UAGvBA,SAASW,UAAU/P,QAAQ,eAAgB7D,KAAMiT,SAAU/Q,SAC3DlC,KAAK6D,QAAQ,eAAgB7D,KAAMiT,SAAU/Q,SAGjD,IAAI2iB,WAEJA,QAAQ,kBAAoB5R,SAASvT,KAAKuS,IAC1C4S,QAAQ,kBAAoB,UAE5B5f,SAAS2B,MAAM+M,YAAY1O,SAAUgO,SAASvT,KAAMmlB,gBAC7CA,QAAQ,OAEfwC,kBAAkBpiB,SAAS0B,OAAOhD,KAAKkhB,UAM3C7kB,KAAKynB,uBAAyB,SAAUxiB,SAAUoiB,kBAAmBnlB,SAEjE,IAAK,IAAI6P,MAAM9M,SAASwM,SAAU,CAC9B,IAAIwB,SAAWhO,SAASqO,UAAUvB,GAAI,OACtC,IAAKkB,SAAU,SACf,GAAIhO,SAAS+L,WAAWiC,SAASvT,KAAKuS,KAAM,SAE5CjS,KAAKmoB,0BAA0BljB,SAAUgO,SAAUoU,kBAAmBnlB,WAI9ElC,KAAKmoB,0BAA4B,SAAUljB,SAAUgO,SAAUoU,kBAAmBnlB,SAC9E+C,SAAS+L,WAAWiC,SAASvT,KAAKuS,KAAOgB,SAASvT,KAElD,IAAK2nB,kBAAkBpiB,SAAS0B,OAAQ,CACpC0gB,kBAAkBpiB,SAAS0B,UAK/BsM,SAASvT,KAAK,kBAAoB,WAElC,UAAU,SAAa,YAAa,CAChCwC,QAAQ4kB,UAAUnjB,KAAKsP,UAGvBA,SAASW,UAAU/P,QAAQ,eAAgB7D,KAAMiT,SAAU/Q,SAC3DlC,KAAK6D,QAAQ,eAAgB7D,KAAMiT,SAAU/Q,SAGjD,IAAI2iB,WAEJA,QAAQ,YAAc5R,SAASvT,KAAKuS,IAEpC4S,QAAQ,kBAAoB5R,SAASvT,KAAKuS,IAC1C4S,QAAQ,kBAAoB,WAE5B5f,SAAS2B,MAAM+M,YAAY1O,SAAUgO,SAASvT,KAAMmlB,gBAC7CA,QAAQ,OAEfwC,kBAAkBpiB,SAAS0B,OAAOhD,KAAKkhB,SAGvC,IAAI0D,sBAAwBvoB,KAAKwoB,4BAA4BnB,kBAAmBpiB,SAAS0B,OACzF,IAAI2e,iBAEJA,cAAc,YAAcrS,SAASvT,KAAKuS,IAE1ChN,SAAS2B,MAAM+M,YAAY1O,SAAUA,SAASsM,aAAa0B,SAASvT,KAAKuS,KAAMqT,eAG/EiD,sBAAsB5kB,KAAK2hB,gBAM/BtlB,KAAKwoB,4BAA8B,SAAUnB,kBAAmBxW,WAC5D,IAAKwW,kBAAkB,gBAAiB,CACpCA,kBAAkB,mBAEtB,IAAIhC,aAAegC,kBAAkB,gBAErC,IAAKhC,aAAaxU,WAAY,CAC1BwU,aAAaxU,cAGjB,OAAOwU,aAAaxU,YAQxB7Q,KAAKya,WAAa,SAAUlI,WAAYmI,QAASjI,UAAW6D,aAAcqE,UACtE,GAAI3a,KAAKmf,YAAa,CAClB,GAAI5M,sBAAsBxO,MAAO,CAC7B,IAAK/D,KAAKsY,iBAAkB,CACxB,MAAM,IAAI7X,MAAM8J,IAAIyF,WAAW,oBAGlC,CACD,GAAIuC,aAAenP,WAAamP,aAAe,KAAM,CACjDA,cAGJ,GAAIA,WAAWvS,KAAK2S,cAAe,CAC/BJ,WAAaA,WAAWvS,KAAK2S,eAKrC,GAAI+H,SAAWjb,SAASC,KAAKqC,KAAKugB,WAAY,CAC1C,GAAI5a,OAAO2L,KAAKd,YAAYpP,SAAW,EACnC,MAAM,IAAI1C,MAAM8J,IAAIyF,WAAW,eAGvC,IAAI2Q,oBAAsB3gB,KAAK8W,iBAE/B9W,KAAK8W,iBAAmB,MACxB,IACI,IAAK,IAAIsH,OAAOpe,KAAK4V,SAAU,CAE3B,GAAIrD,WAAWvS,KAAK4V,SAASwI,KAAKzX,OAC9B3G,KAAK4a,YAAY5a,KAAK4V,SAASwI,KAAKzX,MAAO4L,WAAYmI,QACnDjI,UAAW6D,aAAcqE,eAC5B,GAAID,SAAWjb,SAASC,KAAKqC,KAAKugB,WAAY,CAC/CtiB,KAAK4V,SAAS5V,KAAK4V,SAASwI,KAAKzX,OAAOyN,eAGlD,QAEEpU,KAAK8W,iBAAmB6J,0BAG3B,GAAI3gB,KAAKsY,iBAAkB,CAC5BtY,KAAK4a,YAAY5a,KAAKsY,iBAAiB3R,MAAO4L,WAAYmI,QAASjI,UAC/D6D,aAAcqE,YAQ1B3a,KAAK2T,YAAc,SAAU1O,SAAUwjB,OAAQC,OAAQC,mBACnD,IAAK,IAAIvjB,SAASqjB,OAAQ,CAEtB,GAAIE,oBAAsBvlB,UAAW,CACjC,GAAIqlB,OAAOrjB,QAAUujB,kBAAkBvjB,OACnC,SAIR,GAAIqjB,OAAOrjB,SAAWhC,WAAaqlB,OAAOrjB,SAAW,KAAM,CACvDsjB,OAAOtjB,OAASqjB,OAAOrjB,YAEtB,GAAIqjB,OAAOrjB,iBAAkB8E,KAAM,CACpCwe,OAAOtjB,OAASqjB,OAAOrjB,YAEtB,UAAWqjB,OAAOrjB,SAAW,SAAU,CACxC,IAAIwjB,UAAYH,OAAOrjB,iBAAkBrB,YACzC/D,KAAK2T,YAAY1O,SAAUwjB,OAAOrjB,OAAQwjB,WAC1CF,OAAOtjB,OAASwjB,eAGhBF,OAAOtjB,OAASqjB,OAAOrjB,SAcnCpF,KAAK6T,uBAAyB,SAAU3C,OAAQoQ,iBAAkBuH,gBAG9D,UAAU,kBAAsB,YAAa,CACzCvH,iBAAmB,MAIvB,UAAU,gBAAoB,YAAa,CACvCuH,eAAiB,KAGrB,GAAI3X,OAAQ,QACDA,OAAO,mBACPA,OAAO,0BACPA,OAAO,yBACPA,OAAO,yBACPA,OAAOwK,UAEd,GAAImN,eAAgB,QACT3X,OAAO,kBAGlB,GAAIoQ,iBAAkB,QACXpQ,OAAOiD,gBAK1BnU,KAAK4a,YAAc,SAAU/J,UAAW0B,WAAYmI,QAASjI,UAAW6D,aAAcqE,UAClF,IAAImO,sBAAwB,KAC5B,IAAItW,qBAAuB,KAE3B,GAAID,YAAevS,KAAK2S,eAAiBvP,UAAY,CACjD,GAAImP,WAAWvS,KAAK2S,eAChBJ,WAAWvS,KAAK2S,cAAc,oBAAqB,CACnDmW,sBAAwBvW,WACxBC,6BAEC,GAAID,WAAW,oBAAqB,CACrCuW,yBACAA,sBAAsB9oB,KAAK2S,cAAgBJ,WAC3CC,yBAIR,UAAU,WAAe,SACrB,MAAM,IAAI/R,MAAM8J,IAAIyF,WAAW,eACnC,IAAK0K,QACD,MAAM,IAAIja,MAAM8J,IAAIyF,WAAW,eAEnC,OAAQ0K,SACR,KAAKjb,SAASC,KAAKqC,KAAKsgB,YACxB,KAAK5iB,SAASC,KAAKqC,KAAKugB,WACxB,KAAK7iB,SAASC,KAAKqC,KAAKwgB,WACxB,KAAK9iB,SAASC,KAAKqC,KAAKygB,aACpB,MACJ,QACI,MAAM,IAAI/hB,MAAM8J,IAAIyF,WAAW,eAGnC,IAAKyC,UACDA,iBACC,CACD,KAAMA,qBAAqB1O,eAAiB,WAAe,SAAW,CAClE,GAAI0O,UAAU5B,WAAY,CACtB4B,UAAYA,UAAU5B,eAErB,CACD4B,eAKZ,KAAMA,qBAAqB1O,OAAQ,CAC/B,MAAM,IAAItD,MAAM8J,IAAIyF,WAAW,eAInC,GAAIhQ,KAAK4V,SAAS/E,WAAWhK,QAAS,CAClC,IAAK,IAAIsJ,EAAI,EAAGA,EAAIsC,UAAUtP,OAAQgN,IAAK,CACvC,IAAI/K,MAAQpF,KAAK4V,SAAS/E,WAAWhK,QAAQ4L,UAAUtC,GAAG1M,eAC1D,GAAI2B,QAAUhC,UAAW,CACrB,MAAM,IAAI3C,MAAM8J,IAAIyF,WAAW,aAAcyC,UAAUtC,SAEtD,CACDsC,UAAUtC,GAAK/K,MAAMf,OAKjCiS,aAAeA,aAAe,KAAO,MAErC,GAAIzF,UAAW,CACX,KAAM0B,sBAAsBxO,OAAQ,CAChC,IAAIrE,KAAO,KAEX,GAAI6S,aAAenP,WAAamP,aAAe,KAAM,CACjDA,cAGJ,GAAIvS,KAAKmf,YAAa,CAClB,GAAI5M,WAAWvS,KAAK2S,cAChBjT,KAAO6S,WAAWvS,KAAK2S,cAAc9B,gBACpC,GAAI0B,WAAW1B,WAChBnR,KAAO6S,WAAW1B,eACnB,CACH,GAAI7Q,KAAK6V,cACLnW,KAAO6S,WAAWvS,KAAK6V,oBACtB,GAAItD,WAAW7S,KAChBA,KAAO6S,WAAW7S,KAI1B,GAAIA,gBAAgBqE,MAAO,CAEvBwO,WAAa7S,UAEZ,GAAKgb,SAAWjb,SAASC,KAAKqC,KAAKugB,mBACxB,YAAgB,UACxB5a,OAAO2L,KAAKd,YAAYpP,SAAW,EAAI,CAC3CoP,mBAKC,GAAKmI,SAAWjb,SAASC,KAAKqC,KAAKygB,qBACxB,YAAgB,UACzB,sBAAyB,CAC5BjQ,eAIR,KAAMA,sBAAsBxO,OAAQ,CAChC,MAAM,IAAItD,MAAM8J,IAAIyF,WAAW,aAAca,YAGjD,IAAIkY,qBAAuB,MAC3B,IACI/oB,KAAK4V,SAAS/E,WAAWwG,aAAe,MACxC,GAAI5E,UAAUtP,SAAW,GAAKuX,SAAWjb,SAASC,KAAKqC,KAAKugB,WAAY,CAEpE,GAAI5H,SAAWjb,SAASC,KAAKqC,KAAKugB,WAAY,CAC1CtiB,KAAK4V,SAAS/E,WAAWuD,aAG7B,IAAK,IAAIjE,EAAI,EAAGA,EAAIoC,WAAWpP,OAAQgN,IAAK,CACxC,IAAI8C,SAAWjT,KAAK4V,SAAS/E,WAAWuF,KAAK7D,WAAWpC,GAAImG,aAAc,OAC1E/D,WAAWpC,GAAG8B,IAAMgB,SAASvT,KAAKuS,IAClC,GAAIO,sBAAwBD,WAAWpC,GAAG,YAAa,CACnDqC,qBAAqBD,WAAWpC,GAAG,aAAe8C,SAASvT,KAAKuS,IAEpE,GAAI6W,sBAAuB,CACvB9oB,KAAK6T,uBAAuBZ,SAASvT,YAI5C,CAED,IAAIkT,SAEJ,GAAI5S,KAAK4V,SAAS/E,WAAWM,MAAMhO,OAASoP,WAAWpP,QAAU,GAAI,CACjEyP,YAEA,IAAK,IAAIzC,EAAI,EAAGA,EAAInQ,KAAK4V,SAAS/E,WAAWM,MAAMhO,OAAQgN,IAAK,CAC5D,IAAIe,OAASlR,KAAK4V,SAAS/E,WAAWM,MAAMhB,GAC5C,IAAKe,OAAQ,SAEb,IAAI6B,IAAM/S,KAAK4V,SAAS/E,WAAW0C,QAAQrC,OAAQuB,WACnDG,SAASG,KAAO7B,aAKpB0B,SAAW,KACf,IAAIoW,iBACCthB,OAAO2L,KAAKrT,KAAK4V,SAAS/E,WAAWU,cAAcpO,SAAW,EACnE,IAAK,IAAIgN,EAAI,EAAGA,EAAIoC,WAAWpP,OAAQgN,IAAK,CACxC,IAAIrI,MAAQ,MACZ,IAAIoJ,OAAS,KAGb,GAAI0B,SAAU,CACV,IAAIG,IAAM/S,KAAK4V,SAAS/E,WAAW0C,QAAQhB,WAAWpC,GAAIsC,WAC1DvB,OAAS0B,SAASG,KAClBjL,MAASoJ,SAAW9N,cAEnB,CACD,IAAK,IAAIgQ,EAAI,EAAGA,EAAIpT,KAAK4V,SAAS/E,WAAWM,MAAMhO,OAAQiQ,IAAK,CAC5DlC,OAASlR,KAAK4V,SAAS/E,WAAWM,MAAMiC,GACxC,IAAKlC,OAAQ,SACbpJ,MACC9H,KAAK4V,SAAS/E,WAAWqI,aAAa3G,WAAWpC,GAAIe,OAAQuB,WAC9D,GAAI3K,MAAO,CAEP,QAKZ,GAAIA,MAAO,CACP,GAAI6S,UACI3a,KAAKkS,UAAUF,aAAe5O,WAC9BmP,WAAWpC,GAAG8B,MAAQ7O,UAAY,CAEtCmP,WAAWpC,GAAG8B,IAAMf,OAAOe,IAK/B,IAAI+B,aAAehU,KAAK4V,SAAS/E,WAAWU,aAAaL,OAAOe,KAChE,GAAI+W,kBACIzW,WAAWpC,GAAG,cAAgB/M,kBACvB4Q,eAAiB,YAAc,CAG1C,IAAIiV,YAAcjpB,KAAKkpB,UAAU3W,WAAWpC,GAAIe,QAChD,IAAIiY,aAAe,KAGnB,GAAInV,aAAc,CACd,IAAIqR,aAAerlB,KAAKopB,2BAA2B7W,WAAWpC,GAC1D2Y,sBAAuBjY,WAC3B,GAAIwU,aACA8D,aAAenpB,KAAKkpB,UAAU7D,aAAcrR,cAGpD,IAAKiV,cAAgBE,aACjB,MAAM,IAAI1oB,MAAM8J,IAAIyF,WAAW,eAGvC,OAAQ0K,SACR,KAAKjb,SAASC,KAAKqC,KAAKsgB,YACpB,MAAM,IAAI5hB,MAAM8J,IAAIyF,WAAW,eACnC,KAAKvQ,SAASC,KAAKqC,KAAKwgB,WAEpB,GAAI/P,sBAAwBD,WAAWpC,GAAG,YAAa,CACnDqC,qBAAqBD,WAAWpC,GAAG,aAAee,OAAOe,IAE7D,MACJ,KAAKxS,SAASC,KAAKqC,KAAKygB,aACpB,GAAIhQ,sBAAwBD,WAAWpC,GAAG,YAAa,CACnDqC,qBAAqBD,WAAWpC,GAAG,aAAee,OAAOe,IAG7D,GAAIM,WAAWpC,GAAG8B,MAAQ7O,UACtBmP,WAAWpC,GAAG8B,IAAMf,OAAOe,IAC/BjS,KAAK2T,YACD3T,KAAK4V,SAAS/E,WACd0B,WAAWpC,GAAIe,QACnBlR,KAAK6T,uBAAuB3C,QAC5B,MACJ,QACI,WAGH,CAED,IAAI+B,SACAjT,KAAK4V,SAAS/E,WAAWuF,KAAK7D,WAAWpC,GAAImG,aAAc,OAC/D/D,WAAWpC,GAAG8B,IAAMgB,SAASvT,KAAKuS,IAClC,GAAIO,sBAAwBD,WAAWpC,GAAG,YAAa,CACnDqC,qBAAqBD,WAAWpC,GAAG,aAAe8C,SAASvT,KAAKuS,IAEpE,GAAI6W,sBAAuB,CACvB9oB,KAAK6T,uBAAuBZ,SAASvT,MAEzC,GAAIkT,SAAU,CACV,IAAIG,IAAM/S,KAAK4V,SAAS/E,WAAW0C,QAAQN,SAASvT,KAAM+S,WAC1DG,SAASG,KAAOE,SAASvT,OAKrCkT,SAAW,KAEfmW,qBAAuB,KAE3B,QACI/oB,KAAK4V,SAAS/E,WAAWwG,aAAe,KACxCrX,KAAK4V,SAAS/E,WAAW4G,QACzBzX,KAAK4V,SAAS/E,WAAWgB,eAEzB,GAAIkX,sBAAwBD,sBAAuB,CAC/C9oB,KAAK4V,SAAS/E,WAAWyB,qBAAqBwW,sBAC1CtW,qBAAsBC,eAO1CzS,KAAKopB,2BAA6B,SAAUC,YAAa9W,WAAY+W,WACjE,IAAI9F,WAAajR,WAAWvS,KAAK2S,cAAc,gBAC/C,IAAIZ,GAAKsX,YAAY,YACrB,IAAIrV,aAEJ,IAAKwP,WAAY,OAAOxP,aAGxB,IAAK,IAAI7D,EAAI,EAAGA,EAAIqT,WAAW8F,WAAWnmB,OAAQgN,IAAK,CACnD,IAAIe,OAASsS,WAAW8F,WAAWnZ,GACnC,GAAIe,OAAO,aAAea,IAAMb,OAAO,YAAa,CAChD8C,aAAe9C,OACf,OAIR,OAAO8C,cAGXhU,KAAKkpB,UAAY,SAAUK,QAAS1W,SAChC,IAAIwG,OAAQC,OACZ,IAAK,IAAIpD,aAAaqT,QAAS,CAC3B,GAAIrT,UAAU/N,UAAU,EAAG,IAAM,SAAW+N,WAAa,MAAO,CAC5DmD,OAASkQ,QAAQrT,WACjBoD,OAASzG,QAAQqD,WAEjB,GAAImD,OAASC,QAAUD,SAAW,KAC9B,OAAO,WACN,GAAIA,OAASC,QAAUA,SAAW,KACnC,OAAO,OAInB,OAAO,MAKXtZ,KAAKwpB,WAAa,SAAUjX,WAAYtQ,KACpC,GAAIjC,KAAKmf,YAAa,CAClB,GAAInf,KAAK6V,cAAe,CACpB,IAAI4T,cAAgBzpB,KAAK4V,SAAS5V,KAAK6V,eACvC4T,cAActY,MAAQoB,WAAWvS,KAAK2S,cAAc3S,KAAK6V,eACzD,GAAI4T,cAAcrS,SAAU,CACxBqS,cAAchS,QAElBgS,cAAc5X,mBAEb,CAED,IAAK,IAAIuM,OAAOpe,KAAK4V,SAAU,CAC3B,IAAIlW,KACJ,GAAI6S,WAAWvS,KAAK2S,cAChBjT,KAAO6S,WAAWvS,KAAK2S,cAAcyL,UAErC1e,KAAO,KACXA,KAAOA,KAAOA,QAMd,GAAIM,KAAKod,eAAgB,CAIrB,GAAIpd,KAAKmf,aAAe5M,WAAWvS,KAAK2S,gBAAkBJ,WAAWvS,KAAK2S,cAAc3S,KAAK4V,SAASwI,KAAKzX,OAAQ,CAC/G4L,WAAWvS,KAAK2S,cAAc3S,KAAK4V,SAASwI,KAAKzX,UAGrD,OAAQ3G,KAAKod,gBACT,KAAK3d,SAASC,KAAKqC,KAAKsgB,YACpBriB,KAAK4V,SAASwI,KAAK3D,WAAWlI,WAAY9S,SAASC,KAAKqC,KAAKsgB,aAC7D,MACJ,KAAK5iB,SAASC,KAAKqC,KAAKwgB,WACpBviB,KAAK4V,SAASwI,KAAK3D,WAAWlI,WAAY9S,SAASC,KAAKqC,KAAKwgB,WAAYviB,KAAK4V,SAASwI,KAAKrN,cAC5F,MACJ,KAAKtR,SAASC,KAAKqC,KAAKygB,aACpBxiB,KAAK4V,SAASwI,KAAK3D,WAAWlI,WAAY9S,SAASC,KAAKqC,KAAKygB,aAAcxiB,KAAK4V,SAASwI,KAAKrN,cAC9F,MACJ,QACI,MAAM,IAAItQ,MAAM8J,IAAIyF,WAAW,oBAGpC,CACHhQ,KAAK4V,SAASwI,KAAKjN,MAAQzR,KAG/B,GAAIM,KAAK4V,SAASwI,KAAKhH,SAAU,CAC7BpX,KAAK4V,SAASwI,KAAK3G,QAEvBzX,KAAK4V,SAASwI,KAAKvM,eACnB,GAAIU,WAAWvS,KAAK2S,eACbJ,WAAWvS,KAAK2S,cAAc,oBAAqB,CACtD3S,KAAK4V,SAASwI,KAAK9L,qBAAqBC,aAKhDvS,KAAKod,eAAiBha,UAGtB,GAAIpD,KAAK6c,YAAc,EAAG,CACtB,IAAK,IAAIuB,OAAOpe,KAAK4V,SAAU,CAC3B,GAAI5V,KAAK4V,SAASwI,KAAKtG,WAChB9X,KAAK4V,SAASwI,KAAKpH,SACnBhX,KAAK4V,SAAS5V,KAAK4V,SAASwI,KAAKpH,SAAU,CAC9C,IAAI0S,QAAU1pB,KAAK4V,SAAS5V,KAAK4V,SAASwI,KAAKpH,SAAS7F,MACxD,IAAIzR,QACJ,IAAK,IAAIyQ,EAAI,EAAGA,EAAIuZ,QAAQvmB,OAAQgN,IAAK,CACrC,GAAIuZ,QAAQvZ,GAAGiO,OAAShb,UAAW,CAC/B,IAAK,IAAIgQ,EAAI,EAAGA,EAAIsW,QAAQvZ,GAAGiO,KAAKjb,OAAQiQ,IAAK,CAC7C1T,KAAKiE,KAAK+lB,QAAQvZ,GAAGiO,KAAKhL,WAEvBsW,QAAQvZ,GAAGiO,MAG1Bpe,KAAK4V,SAASwI,KAAKjN,MAAQzR,KAC3B,GAAIM,KAAK4V,SAASwI,KAAKhH,SAAU,CAC7BpX,KAAK4V,SAASwI,KAAK3G,QAEvBzX,KAAK4V,SAASwI,KAAKvM,uBAMlC,CACD,GAAIU,sBAAsBxO,MAAO,CAC7B/D,KAAKsY,iBAAiBnH,MAAQoB,eAE7B,CACD,GAAIvS,KAAK6V,cACL7V,KAAKsY,iBAAiBnH,MAAQoB,WAAWvS,KAAK6V,oBAC7C,GAAItD,WAAW7S,KAChBM,KAAKsY,iBAAiBnH,MAAQoB,WAAW7S,SACxC,CACDM,KAAKsY,iBAAiBnH,SACtBnR,KAAKsY,iBAAiBnH,MAAM,GAAKoB,aAK7C,IAAK,IAAI6L,OAAOpe,KAAK4V,SAAU,CAC3B,GAAI5V,KAAK4V,SAASwI,KAAKhH,SAAU,CAC7BpX,KAAK4V,SAASwI,KAAK3G,QAEvBzX,KAAK4V,SAASwI,KAAKvM,iBAO3B7R,KAAK2pB,mBAAqB,SAAU1kB,SAAU6N,SAAU5B,QACpD,IAAInJ,MAAQ9C,SAASmM,OAAO0B,UAAU/K,MACtCmJ,OAAOe,IAAMa,SAEb,IAAK7N,SAASkM,MAAMpJ,OAAQ,CACxB9C,SAASkM,MAAMpJ,UAEnB/H,KAAK2T,YAAY3T,KAAK4T,UAAW1C,OAAQjM,SAASkM,MAAMpJ,QACxDmJ,OAASjM,SAASkM,MAAMpJ,OAExB,GAAI9C,SAAS2B,MAAMsL,UAAUF,aAAe5O,UAAW,CACnD,IAAI2O,GAAK9M,SAASkM,MAAMpJ,OAAO9C,SAAS2B,MAAMsL,UAAUF,YACxD,GAAID,KAAO3O,UAAW,CAClB2O,IAAM,UAGC9M,SAASmM,OAAO0B,UAEvB,GAAI7N,SAASsM,aAAauB,YAAc,KAAM,CAE1C7N,SAASoM,UAAUyB,UAAY,IAAIrT,SAASC,KAAKgR,aAAa3I,OAIlE9C,SAASmM,OAAOW,IAAM,IAAItS,SAASC,KAAKgR,aAAa3I,OACrDmJ,OAAOe,IAAMF,IAIrB,OAAOb,QAOXlR,KAAK4pB,gBAAkB,SAAU3kB,SAAU6N,SAAU+W,YAAaC,kBAE9D,GAAIA,iBAAkB,CAElB,GAAI7kB,SAASsM,aAAauB,UAAW,CACjC7N,SAASsM,aAAauB,UAAUqB,aAAe0V,iBAGlD,CACD,IAAI9hB,MAAQ9C,SAASmM,OAAO0B,UAAU/K,MACtC9C,SAASkM,MAAMpJ,OAAOoM,aAAe0V,cAO7C7pB,KAAK+pB,qBAAuB,SAAUrU,WAAYzQ,UAC9C,IAAIvF,KAEJ,GAAIgW,aAAetS,UAAW,OAAOA,UACrC,GAAIpD,KAAK2S,aAAc,CACnB,GAAI+C,WAAW1V,KAAK2S,cAChBjT,KAAOgW,WAAW1V,KAAK2S,cAAc1N,SAAS0B,WAEjD,CAED,GAAI+O,sBAAsB3R,MAAO,CAC7BrE,KAAOgW,eACJ,CAEH,GAAI1V,KAAK6V,cAAe,CACpBnW,KAAOgW,WAAW1V,KAAK6V,oBACpB,GAAIH,WAAWhW,KAAM,CAExBA,KAAOgW,WAAWhW,OAK9B,OAAOA,MAUXM,KAAKgqB,mBAAqB,SAAUzX,WAAYtQ,KAC5C,IAAIgoB,SAAW,MACXJ,YAGJ,GAAI7pB,KAAK2S,aAAc,CACnB,IAAI0U,kBAAoB9U,WAAWvS,KAAK2S,cAGxC,IAAI1N,SAAWhD,IAAIC,QAAQ+Q,SAASW,UACpC,IAAIsW,gBAAkBlqB,KAAK+pB,qBAAqBxX,WAAYtN,UAE5D,GAAIilB,2BAA2BnmB,MAAO,CAClC,GAAImmB,gBAAgB/mB,OAAS,EAAG,CAC5BlB,IAAIC,QAAQF,QAAU,MACtB,MAAM,IAAIvB,MAAM8J,IAAIyF,WAAW,eAGnC,IAAK,IAAIG,EAAI,EAAGA,EAAI+Z,gBAAgB/mB,OAAQgN,IAAK,CAC7C,IAAI2C,SAAW7Q,IAAIC,QAAQ+Q,SAAS0F,QAEpC,IAAK7F,SAAU,CACX,MAAM,IAAIrS,MAAM8J,IAAIyF,WAAW,aAAc,yBAKjD6Z,YAAczmB,UAEd,GAAI8mB,gBAAgB/Z,GAAG,mBAAoB,CACvC,IAAIga,SAAWD,gBAAgB/Z,GAAG,YAClC0Z,YACI7pB,KAAKoqB,8BAA8B/C,kBAAmBpiB,SAAUklB,UACpEF,SAAW,KAGf,IAAI/Y,OAASlR,KAAK2pB,mBAAmB1kB,SAAU6N,SAAUoX,gBAAgB/Z,IACzE,GAAI0Z,YACA7pB,KAAK4pB,gBAAgB3kB,SAAU6N,SAAU+W,YAAa,OAG1D,GAAIK,gBAAgB/Z,GAAG,mBAChB0Z,YAAa,CAChB3Y,OAAOwK,UAAY,KACnB,GAAImO,cAAgB,WAAY,QACrB3Y,OAAOiD,cAItBlS,IAAIC,QAAQ+Q,SAAW,IAAIxT,SAASC,KAAKoU,SAAS7O,SAAUiM,cAGjE,CAEH,IAAIjM,SAAWjF,KAAKsY,iBACpB,IAAI5Y,KAAOM,KAAK+pB,qBAAqBxX,YAErC,GAAI7S,gBAAgBqE,MAAO,CACvB,GAAIrE,KAAKyD,OAAS,EAAG,CACjBlB,IAAIC,QAAQF,QAAU,MACtB,MAAM,IAAIvB,MAAM8J,IAAIyF,WAAW,eAGnC,IAAK,IAAIG,EAAI,EAAGA,EAAIzQ,KAAKyD,OAAQgN,IAAK,CAClC,IAAI2C,SAAW7Q,IAAIC,QAAQ+Q,SAAS0F,QAEpC,IAAK7F,SAAU,CACX,MAAM,IAAIrS,MAAM8J,IAAIyF,WAAW,aAAc,yBAGjD,IAAIkB,OAASlR,KAAK2pB,mBAAmB1kB,SAAU6N,SAAUpT,KAAKyQ,IAC9DlO,IAAIC,QAAQ+Q,SAAW,IAAIxT,SAASC,KAAKoU,SAAS7O,SAAUiM,UAKxE,OAAO+Y,UAYXjqB,KAAKqqB,qBAAuB,SAAUhD,kBAAmBplB,KACrD,IAAIgoB,SAAW,MACf,IAAIhlB,SAAWhD,IAAIC,QAAQ+Q,SAASW,UAEpC,IAAI0W,iBAAmBjD,kBAAkB,gBAKzC,GAAIiD,iBAAkB,CAClB,IAAI/B,sBAAwB+B,iBAAiBrlB,SAAS0B,OAEtD,GAAI4hB,sBAAsBplB,OAAS,EAAG,CAClClB,IAAIC,QAAQF,QAAU,MACtB,MAAM,IAAIvB,MAAM8J,IAAIyF,WAAW,eAGnC,IAAI8C,SAAWyV,sBAAsB,GAAG,kBACxC,IAAKzV,SAAU,CACX,MAAM,IAAIrS,MAAM8J,IAAIyF,WAAW,aAAc,2BAIjD,GAAIuY,sBAAsB,GAAG,mBAAoB,CAC7C,IAAI4B,SAAW5B,sBAAsB,GAAG,YACxC,IAAIsB,YACA7pB,KAAKoqB,8BAA8B/C,kBAAmBpiB,SAAUklB,UACpEnqB,KAAK4pB,gBAAgB3kB,SAAU6N,SAAU+W,YAAa,MACtDI,SAAW,MAInB,OAAOA,UAaXjqB,KAAKuqB,sBAAwB,SAAUhY,WAAYtQ,KAC/C,IAAI4nB,YAGJ,IAAK7pB,KAAK2S,aAAc,CAEpB,MAAM,IAAIlS,MAAM8J,IAAIyF,WAAW,aAAc,4BAIjD,IAAIqX,kBAAoB9U,WAAWvS,KAAK2S,cACxC,GAAI0U,kBAAkBrnB,KAAK2S,cACvB0U,kBAAoBA,kBAAkBrnB,KAAK2S,cAE/C,IAAI2X,iBAAmBjD,kBAAkB,gBAEzC,IAAK,IAAIjJ,OAAOpe,KAAK4V,SAAU,CAC3B,IAAI3Q,SAAWjF,KAAK4V,SAASwI,KAE7B,IAAI8L,gBAAkB7C,kBAAkBpiB,SAAS0B,OACjD,GAAIujB,2BAA2BnmB,MAAO,CAClC,IAAK,IAAIoM,EAAI,EAAGA,EAAI+Z,gBAAgB/mB,OAAQgN,IAAK,CAE7C,IAAI2C,SAAWoX,gBAAgB/Z,GAAG,kBAClC,IAAK2C,SAAU,CACX,MAAM,IAAIrS,MAAM8J,IAAIyF,WAAW,aAAc,4BAKjD6Z,YAAczmB,UAEd,GAAI8mB,gBAAgB/Z,GAAG,mBAAoB,CACvC,IAAIga,SAAWD,gBAAgB/Z,GAAG,YAClC0Z,YACI7pB,KAAKoqB,8BAA8B/C,kBAAmBpiB,SAAUklB,UAExE,IAAIjZ,OAASlR,KAAK2pB,mBAAmB1kB,SAAU6N,SAAUoX,gBAAgB/Z,IACzE,GAAI0Z,YAAa,CACb7pB,KAAK4pB,gBAAgB3kB,SAAU6N,SAAU+W,YAAa,OAI1D,GAAIK,gBAAgB/Z,GAAG,mBAChB0Z,YAAa,CAChB3Y,OAAOwK,UAAY,KACnB,GAAImO,cAAgB,WAAY,QACrB3Y,OAAOiD,cAOtB,IAAI2S,UAAY7kB,IAAIC,QAAQ4kB,UAC5B,IAAK,IAAI3hB,IAAM,EAAGA,IAAM2hB,UAAU3jB,OAAQgC,MAAO,CAC7C,GAAI2hB,UAAU3hB,KAAKzF,KAAK,QAAUoT,SAAU,CACxCgU,UAAU3hB,KAAKzF,KAAOwR,OACtB,UAUpB,GAAIoZ,iBAAkB,CAClB,IAAK,IAAIlM,OAAOpe,KAAK4V,SAAU,CAC3B,IAAI3Q,SAAWjF,KAAK4V,SAASwI,KAC7B,IAAImK,sBAAwB+B,iBAAiBrlB,SAAS0B,OACtD,IAAIkjB,YAEJ,GAAItB,iCAAiCxkB,MAAO,CACxC,IAAK,IAAIoM,EAAI,EAAGA,EAAIoY,sBAAsBplB,OAAQgN,IAAK,CAEnD,GAAIoY,sBAAsBpY,GAAG,mBAAqB,UAAW,CACzD,IAAI2C,SAAWyV,sBAAsBpY,GAAG,kBACxC,IAAK2C,SAAU,CACX,MAAM,IAAIrS,MAAM8J,IAAIyF,WAAW,aAAc,4BAGjD6Z,YAAczmB,UAEd,GAAImlB,sBAAsBpY,GAAG,mBAAoB,CAC7C,IAAIga,SAAW5B,sBAAsBpY,GAAG,YAExC0Z,YAAc7pB,KAAKoqB,8BAA8B/C,kBAC7CpiB,SAAUklB,UACdnqB,KAAK4pB,gBAAgB3kB,SAAU6N,SAAU+W,YAAa,MAI1D,IAAKtB,sBAAsBpY,GAAG,mBACvB0Z,cACA5kB,SAASsM,aAAauB,UAAW,CACpC7N,SAASsM,aAAauB,UAAU4I,UAAY,KAC5C,GAAImO,cAAgB,WAAY,QACrB5kB,SAASsM,aAAauB,UAAUqB,qBAevEnU,KAAKwqB,0BAA4B,SAAUtoB,SAEvC,IAAK,IAAIiD,IAAM,EAAGA,IAAMjD,QAAQ4kB,UAAU3jB,OAAQgC,MAAO,CACrDnF,KAAK6T,uBAAuB3R,QAAQ4kB,UAAU3hB,KAAKzF,KAAM,MAAO,OAGpE,IAAK,IAAIyF,IAAM,EAAGA,IAAMjD,QAAQ4kB,UAAU3jB,OAAQgC,MAAO,CACrD,IAAI8N,SAAW/Q,QAAQ4kB,UAAU3hB,KACjC,OAAQ8N,SAASvT,KAAK,mBACtB,IAAK,UACDuT,SAASW,UAAU/P,QAAQ,cAAe7D,KAAMiT,SAAU/Q,QAAQF,QAASE,SAC3ElC,KAAK6D,QAAQ,cAAe7D,KAAMiT,SAAU/Q,QAAQF,QAASE,SAC7D,MACJ,IAAK,WACD+Q,SAASW,UAAU/P,QAAQ,cAAe7D,KAAMiT,SAAU/Q,QAAQF,QAASE,SAC3ElC,KAAK6D,QAAQ,cAAe7D,KAAMiT,SAAU/Q,QAAQF,QAASE,SAC7D,MACJ,IAAK,UACD+Q,SAASW,UAAU/P,QAAQ,cAAe7D,KAAMiT,SAAU/Q,QAAQF,QAASE,SAC3ElC,KAAK6D,QAAQ,cAAe7D,KAAMiT,SAAU/Q,QAAQF,QAASE,SAC7D,SAUZlC,KAAKoqB,8BAAgC,SAAU/C,kBAAmBpiB,SAAUklB,UACxE,IAAID,gBACJ,IAAIO,iBAAmBpD,kBAAkB,gBAEzC,GAAIoD,iBAAkB,CAClBP,gBAAkBO,iBAAiBxlB,SAAS0B,OAGhD,GAAIujB,2BAA2BnmB,MAAO,CAClC,IAAK,IAAIoM,EAAI,EAAGA,EAAI+Z,gBAAgB/mB,OAAQgN,IAAK,CAE7C,IAAI4B,GAAKmY,gBAAgB/Z,GAAG,YAC5B,GAAI4B,KAAOoY,SAAU,CACjB,IAAIN,YAAcK,gBAAgB/Z,GAAG,eACrC,OAAO0Z,cAAgB,KACnB,6DAA+DA,cAK/E,OAAOzmB,WAGXpD,KAAK2iB,aAAe,SAAU/R,KAAM5O,QAASE,SACzC,IAAID,IAAMC,QAAQD,IACd4b,WACAoE,QAIJpE,WAAajN,KAAKsR,oBAAoB,QAEtC,GAAIrE,YAAcA,WAAWsE,YAAa,CACtCF,QAAUxiB,SAASC,KAAK2Q,cAAcI,UAAUoN,WAAWsE,aAC3D,IAAKF,QAAS,CACV,MAAM,IAAIxhB,MAAMhB,SAASC,KAAK4D,YAAY,aAAcua,WAAWsE,cAGvE,UAAYF,QAAuB,kBAAM,WAAY,CACjD/f,QAAQwoB,SAAWzI,QAAQ0I,gBAAgB/Z,KAAM1O,QAAQwoB,UAAY9nB,UAAW,UAMxF,IAAIV,QAAQ0O,KAAKwM,gBAAkBlb,QAAQ0O,KAAKwM,iBAAmB3d,SAASC,KAAKqC,KAAKugB,WAAY,CAC9F1R,KAAKwD,aAETxD,KAAK4Y,WAAWtnB,QAAQwoB,SAAUzoB,KAGlC,IAAK,IAAImc,OAAOxN,KAAKgF,SAAU,CAC3B,IAAKhF,KAAKgF,SAASwI,KAAKpH,UAAYpG,KAAKkG,iBAAkB,CACvDlG,KAAKgF,SAASwI,KAAK/J,WAAWzD,KAAKgF,SAASwI,KAAKjG,iBAK7DnY,KAAK6iB,cAAgB,SAAUjS,KAAM5O,QAASE,SAC1C0O,KAAK/M,QAAQ,YAAa+M,KAAM1O,QAAQF,QAASE,SACjD,GAAIA,QAAQod,SAAU,CAClB,GAAItd,QAAS,CACTE,QAAQod,SAAS3e,QAAQiQ,KAAM5O,QAASE,aAEvC,CACDA,QAAQod,SAAS1e,OAAOgQ,KAAM5O,QAASE,YAKnDlC,KAAK4iB,WAAa,SAAUhS,KAAM5O,QAASE,SACvC0O,KAAKwD,aACLxD,KAAKuV,kBAAkBvV,KAAM,KAAM,KAAM1O,UAG7ClC,KAAK+a,YAAc,SAAU9V,SAAU8M,IAGnC,IAAI6Y,MAAQ3lB,SAASmM,OAAOW,IAC5B,GAAI6Y,QAAUxnB,UAAW,CACrB,IAAI2E,MAAQ6iB,MAAM7iB,MAClB9C,SAASkM,MAAMpJ,OAAS,KAE5B9C,SAASqM,gBAAkB,YACpBrM,SAASmM,OAAOW,WAChB9M,SAASsM,aAAaQ,KAIjC/R,KAAKgb,YAAc,SAAU/V,SAAU8M,GAAI8Y,kBAEvC,UAAU,kBAAsB,YAAa,CACzCA,iBAAmB,MAKvB,IAAI3Z,OAASjM,SAASsM,aAAaQ,IAGnC,GAAIb,OAAQ,CACR,IAAInJ,MAAQ9C,SAASmM,OAAOW,IAAIhK,MAChC9C,SAAS2B,MAAM+M,YAAY1O,SAAUiM,OAAQjM,SAASkM,MAAMpJ,QAC5D,GAAI8iB,iBACA5lB,SAAS2B,MAAMiN,uBAAuB5O,SAASkM,MAAMpJ,OAAQ,aAE9D9C,SAASsM,aAAaQ,KAIjC/R,KAAKib,YAAc,SAAUhW,SAAU8M,GAAI8Y,kBAEvC,UAAU,kBAAsB,YAAa,CACzCA,iBAAmB,MAIvB,IAAI3Z,OAASjM,SAASsM,aAAaQ,IAGnC,GAAIb,OAAQ,CACR,IAAInJ,MAAQmJ,OAAOE,cACZF,OAAOE,OACd,GAAIyZ,iBACA5lB,SAAS2B,MAAMiN,uBAAuB3C,OAAQ,MAElD,GAAKnJ,QAAU3E,WAAe6B,SAASkM,MAAMpJ,SAAW,KAAO,CAC3D9C,SAASkM,MAAMpJ,OAASmJ,WAEvB,CACDjM,SAASkM,MAAMxN,KAAKuN,QACpBnJ,MAAQ9C,SAASkM,MAAMhO,OAAS,EAEpC8B,SAASmM,OAAOW,IAAM,IAAItS,SAASC,KAAKgR,aAAa3I,cAElD9C,SAASsM,aAAaQ,KAIjC/R,KAAK4lB,gBAAkB,SAAUhV,KAAM5O,QAASE,SAC5C,IAAID,IAAMC,QAAQD,IAClB,IAAIgR,SAAW/Q,QAAQ+Q,SAEvB,IAEIrC,KAAKiD,uBAAuBZ,SAASvT,KAAM,OAE3CuT,SAASW,UAAU/P,QAAQ,cAAe+M,KAAMqC,SAAU/Q,QAAQF,QAASE,SAC3E0O,KAAK/M,QAAQ,cAAe+M,KAAMqC,SAAU/Q,QAAQF,QAASE,SAE/D,QACEA,QAAQqkB,SAAW,KACnB3V,KAAKka,mBAAmB7oB,OAIhCjC,KAAK6lB,eAAiB,SAAUjV,KAAM5O,QAASE,SAC3C,IAAID,IAAMC,QAAQD,IAClB,IAAIsQ,WAAarQ,QAAQwoB,SACzB,IAAIJ,iBAAmB,KACvB,IAAIjD,kBAAoB,KACxB,IAAI3nB,KAKJ,IAAIuqB,SAAW,MACf,GAAIrZ,KAAKoU,gBAAgB,UAAW,CAChCqC,kBAAoB9U,WAAW3B,KAAK+B,cACpC2X,iBAAmBjD,kBAAkB,gBAErC,GAAIiD,iBAAkB,CAClB5qB,KAAO4qB,iBAAiBpoB,QAAQ+Q,SAASW,UAAUjN,YAGtD,CACDjH,KAAOkR,KAAKmZ,qBAAqBxX,WAAYrQ,QAAQ+Q,SAASW,WAGlE,GAAIlU,gBAAgBqE,MAAO,CACvB,GAAIrE,KAAKyD,OAAS,EAAG,CACjBjB,QAAQF,QAAU,MAClB,MAAM,IAAIvB,MAAM8J,IAAIyF,WAAW,gBAIvC,GAAIsa,iBAAkB,CAClBL,SAAWrZ,KAAKyZ,qBAAqBhD,kBAAmBplB,KAG5D,GAAIgoB,SACA/nB,QAAQF,QAAU,MAEtB,GAAI4O,KAAKsM,iBAAkB,CACvB,IAAK+M,SAAU,QAEJ/nB,QAAQ+Q,SAASW,UAAUrC,aAAarP,QAAQ+Q,SAASvT,KAAKuS,SAGpE,CACDrB,KAAKkV,aAAalV,KAAM5O,QAASE,YAK7ClC,KAAK8lB,aAAe,SAAUlV,KAAM5O,QAASE,SACzC,GAAI0O,KAAKsM,iBAAkB,CACvBtM,KAAKqK,YAAY/Y,QAAQ+Q,SAASW,UAAW1R,QAAQ+Q,SAASvT,KAAKuS,OAI3EjS,KAAKilB,gBAAkB,SAAUrU,KAAM5O,QAASE,SAC5C,IAAID,IAAMC,QAAQD,IAClB,IAAIgR,SAAW/Q,QAAQ+Q,SAEvB,IAEIrC,KAAKiD,uBAAuBZ,SAASvT,KAAM,OAE3CuT,SAASW,UAAU/P,QAAQ,cAAe+M,KAAMqC,SAAU/Q,QAAQF,QAASE,SAC3E0O,KAAK/M,QAAQ,cAAe+M,KAAMqC,SAAU/Q,QAAQF,QAASE,SAC/D,QACEA,QAAQqkB,SAAW,KACnB3V,KAAKka,mBAAmB7oB,OAIhCjC,KAAKklB,eAAiB,SAAUtU,KAAM5O,QAASE,SAC3C,IAAID,IAAMC,QAAQD,IAClB,IAAIiP,OAAShP,QAAQwoB,SACrB,IAAIT,SAAWrZ,KAAKoZ,mBAAmB9Y,OAAQjP,KAE/C,GAAIgoB,SACA/nB,QAAQF,QAAU,MAEtB,GAAI4O,KAAKsM,iBAAkB,CACvB,IAAK+M,SAAU,QAEJ/nB,QAAQ+Q,SAASW,UAAUrC,aAAarP,QAAQ+Q,SAASvT,KAAKuS,SAGpE,CACDrB,KAAKuU,aAAavU,KAAM5O,QAASE,YAK7ClC,KAAKmlB,aAAe,SAAUvU,KAAM5O,QAASE,SACzC,GAAI0O,KAAKsM,iBAAkB,CACvBtM,KAAKmK,YAAY7Y,QAAQ+Q,SAASW,UAAW1R,QAAQ+Q,SAASvT,KAAKuS,OAK3EjS,KAAKwlB,gBAAkB,SAAU5U,KAAM5O,QAASE,SAC5C,IAAID,IAAMC,QAAQD,IAClB,IAAIgR,SAAW/Q,QAAQ+Q,SACvB,IAEIrC,KAAKiD,uBAAuBZ,SAASvT,KAAM,OAE3CuT,SAASW,UAAU/P,QAAQ,cAAe+M,KAAMqC,SAAU/Q,QAAQF,QAASE,SAC3E0O,KAAK/M,QAAQ,cAAe+M,KAAMqC,SAAU/Q,QAAQF,QAASE,SAC/D,QACEA,QAAQqkB,SAAW,KACnB3V,KAAKka,mBAAmB7oB,OAIhCjC,KAAKylB,eAAiB,SAAU7U,KAAM5O,QAASE,SAC3C,IAAID,IAAMC,QAAQD,IAClB,IAAIgoB,SAAWrZ,KAAKoZ,mBAAmB9nB,QAAQwoB,SAAUzoB,KAEzD,GAAIgoB,SAAU,CACV/nB,QAAQF,QAAU,MAGtB,GAAI4O,KAAKsM,iBAAkB,CACvB,IAAK+M,SAAU,CACX/nB,QAAQF,QAAU,YAEXE,QAAQ+Q,SAASW,UAAUrC,aAAarP,QAAQ+Q,SAASvT,KAAKuS,SAGpE,CACDrB,KAAK8U,aAAa9U,KAAM5O,QAASE,YAK7ClC,KAAK0lB,aAAe,SAAU9U,KAAM5O,QAASE,SAEzC,GAAI0O,KAAKsM,iBAAkB,CACvBhb,QAAQF,QAAU,MAClB4O,KAAKoK,YAAY9Y,QAAQ+Q,SAASW,UAAW1R,QAAQ+Q,SAASvT,KAAKuS,OAK3EjS,KAAK2mB,oBAAsB,SAAU/V,KAAM5O,QAASE,SAChD,IAAI6oB,QAAU7oB,QAAQwoB,SACtB9Z,KAAK2Z,sBAAsBQ,QAAS7oB,QAAQD,KAG5C2O,KAAKyQ,eACL,IAAII,QAAU7Q,KAAKuK,aACnBvK,KAAKuV,kBAAkBvV,KAAM,KAAM6Q,SAEnC7Q,KAAK2Q,uBAAuBE,SAE5B,GAAI7Q,KAAKsM,iBAAkB,CACvBtM,KAAK6K,kBAKbzb,KAAK6mB,kBAAoB,SAAUjW,KAAM5O,QAASE,SAC9C0O,KAAK2Q,uBAAuB,MAC5B,GAAI3Q,KAAKsM,iBAAkB,CACvBtM,KAAKkK,gBAETlK,KAAKuV,kBAAkBvV,KAAM,KAAM,KAAM1O,UAc7ClC,KAAKinB,sBAAwB,SAAUrW,KAAM5O,QAASE,SAClD,IAAIuf,QAGJ7Q,KAAKyQ,eACLI,QAAU7Q,KAAKuK,aACfvK,KAAKuV,kBAAkBvV,KAAM,KAAM6Q,SACnC7Q,KAAK2Q,uBAAuB,QAGhCvhB,KAAKymB,qBAAuB,SAAU7V,KAAM5O,QAASE,SAEjD,GAAKA,QAAQD,IAAI+oB,QAAU,KAAO9oB,QAAQD,IAAI+oB,OAAS,MAC/Cpa,KAAKe,YAAYxO,OAAS,GAAKyN,KAAKkR,sBAAuB,CAC/D5f,QAAQF,QAAU,MAKtB,GAAI4O,KAAKqM,aAAe,KAAM,CAC1BrM,KAAK4Z,0BAA0BtoB,SAGnC0O,KAAKoT,sBACLpT,KAAKwV,sBAAsBlkB,QAAQF,QAASE,UAIhDlC,KAAKomB,sBAAwB,SAAUpkB,QAASE,SAC5ClC,KAAK6D,QAAQ,mBAAoB7D,KAAMgC,QAASE,SAEhD,GAAIA,QAAQ4kB,UAAW,CACnB,GAAI5kB,QAAQod,SAAU,CAClB,GAAItd,QAAS,CACTE,QAAQod,SAAS3e,QAAQX,KAAMgC,QAASE,aAEvC,CACDA,QAAQod,SAAS1e,OAAOZ,KAAMgC,QAASE,gBAI9C,GAAIA,QAAQC,OAASD,QAAQC,MAAMmd,SAAU,CAC9C,GAAItd,QAAS,CACTE,QAAQC,MAAMmd,SAAS3e,QAAQX,KAAMgC,QAASE,aAE7C,CACDA,QAAQC,MAAMmd,SAAS1e,OAAOZ,KAAMgC,QAASE,UAKrD,IAAIof,iBAAmBthB,KAAKkd,iBAG5B,GAAIhb,QAAQ4kB,UAAW,CACnB,IAAK,IAAI3hB,IAAM,EAAGA,IAAMjD,QAAQ4kB,UAAU3jB,OAAQgC,MAAO,CACrD,IAAI8N,SAAW/Q,QAAQ4kB,UAAU3hB,KACjC,GAAImc,iBAAkB,QACXrO,SAASvT,KAAKyU,oBAElBlB,SAASvT,KAAK,wBAGxB,GAAIwC,QAAQC,OAASD,QAAQC,MAAM4a,WAAY,CAChD,IAAK,IAAI5X,IAAM,EAAGA,IAAMjD,QAAQC,MAAM4a,WAAW5Z,OAAQgC,MAAO,CAC5D,IAAI8N,SAAW/Q,QAAQC,MAAM4a,WAAW5X,KAAK8N,SAC7C,GAAIqO,iBAAkB,QACXrO,SAASvT,KAAKyU,iBASrCnU,KAAKirB,sBAAwB,SAAS/oB,SAClC,IAAIgpB,UACAC,cACApI,YACAqI,aACAhY,EACAjD,EAEJ,GAAIjO,UAAYA,QAAQF,QAAS,CAC7B,GAAIE,QAAQD,IAAI+oB,QAAU,KAAO9oB,QAAQD,IAAI+oB,OAAS,IAAK,CACvD,IACI,IAAIK,eAAiB7mB,KAAKK,MAAM3C,QAAQD,IAAIqpB,cAM5C,GAAID,0BAA0BtnB,MAAO,CACjConB,WAAaE,oBACV,GAAIA,0BAA0B3jB,OAAQ,CACzCyjB,WAAWxnB,KAAK0nB,gBAEpB,IAAKlb,EAAI,EAAGA,EAAIgb,WAAWhoB,OAAQgN,GAAK,EAAG,CACvC4S,YAAcoI,WAAWhb,GACzB,GAAI4S,YAAYwI,QAAS,CACrBL,OAAOvnB,MACH2B,KAAM7F,SAASC,KAAKqC,KAAKypB,OACzBzsB,MAAOgkB,YAAYwI,UAEvBH,aAAgBrI,YAAYwI,YACzB,CACHH,aAAe,KAEnB,GAAIrI,YAAY0I,mBAAmB1nB,MAAO,CACtC,IAAKqP,EAAI,EAAGA,EAAI2P,YAAY0I,QAAQtoB,OAAQiQ,GAAK,EAAG,CAChD,GAAK2P,YAAY0I,QAAQrY,GAAGsY,YAAc,GAClC3I,YAAY0I,QAAQrY,GAAGuY,YAAcP,aAAe,CAExD,SAEJF,OAAOvnB,MACH2B,KAAM7F,SAASC,KAAKqC,KAAK6pB,UACzB7sB,MAAOgkB,YAAY0I,QAAQrY,GAAGuY,UAC9BE,SAAU9I,YAAY0I,QAAQrY,GAAGsY,eAMrD,MAAO7sB,KAIX,GAAIqD,QAAQ8d,UAAW,CACnBkL,OAAOvnB,MACH2B,KAAM7F,SAASC,KAAKqC,KAAK+pB,MACzB/sB,MAAOmD,QAAQ8d,YAGvB,GAAIkL,OAAO/nB,SAAW,GACfjB,QAAQD,MACPC,QAAQD,IAAI+oB,QAAU,KAAO9oB,QAAQD,IAAI+oB,OAAS,KAAM,CAC5DE,OAAOvnB,MACH2B,KAAM7F,SAASC,KAAKqC,KAAK+pB,MACzB/sB,MAAO,sBAAwBmD,QAAQD,IAAI+oB,OAAS,IAAM9oB,QAAQD,IAAI8pB,WACtET,aAAcppB,QAAQD,IAAIqpB,gBAItC,OAAOJ,QAGXlrB,KAAKmmB,kBAAoB,SAAUvV,KAAMzO,MAAOsf,QAASvf,SACrD,IAAIgpB,OACAc,UACAX,eACAlb,EACAiD,EACAgL,IAEJ,GAAIjc,MAAO,CACP,GAAIA,MAAM4a,aAAe3Z,UAAW,OACpC,IAAK+M,EAAI,EAAGA,EAAIhO,MAAM4a,WAAW5Z,OAAQgN,IAAK,CAC1CjO,QAAUC,MAAM4a,WAAW5M,GAC3B,IAAKjO,QAAQF,SAAWE,QAAQD,IAAK,CACjC,GAAIC,QAAQD,IAAI+oB,QAAW,KAAO9oB,QAAQD,IAAI+oB,OAAS,IAAK,CAExDpa,KAAKe,YAAYhO,MAAMkmB,YAAa3nB,QAAQ+Q,SAASvT,KAAKyU,eAE1DvD,KAAKgF,SAAS1T,QAAQ+Q,SAASW,UAAUjN,OAAOgL,YAAYhO,MACxD2B,KAAM7F,SAASC,KAAKqC,KAAKkqB,WACzBla,GAAI7P,QAAQ+Q,SAASvT,KAAKuS,IAC1BlT,MAAOmD,QAAQ+Q,SAASvT,KAAKyU,mBAEhC,CACD+W,OAASlrB,KAAKirB,sBAAsB/oB,SACpC8pB,UAAY,GACZ,IAAK5Y,EAAI,EAAGA,EAAI8X,OAAO/nB,OAAQiQ,GAAK,EAAG,CACnC,GAAI8X,OAAO/nB,OAAS,GAAK+nB,OAAO9X,GAAGrU,MAAMsb,QAAQ,YAAc,EAAG,CAG9D,SAGJ,GAAInY,QAAQ+Q,WACJiY,OAAO9X,GAAG9N,OAAS7F,SAASC,KAAKqC,KAAK6pB,WACpCV,OAAO9X,GAAG9N,OAAS7F,SAASC,KAAKqC,KAAKypB,QAAS,CACrDN,OAAO9X,GAAGrB,GAAK7P,QAAQ+Q,SAASvT,KAAKuS,IACrC/P,QAAQ+Q,SAASW,UAAUjC,YAAYhO,KAAKunB,OAAO9X,IAEvD,GAAI4Y,UAAU7oB,SAAW,EAAG,CACxB6oB,UAAYd,OAAO9X,GAAGrU,UAErB,CACDitB,WAAa,KAAOd,OAAO9X,GAAGrU,OAItC6R,KAAKe,YAAYhO,MAAMkmB,YAAamC,oBAK/C,GAAIvK,mBAAmB1d,MAAO,CAC/B,IAAKoM,EAAI,EAAGA,EAAIsR,QAAQte,OAAQgN,IAAK,CACjC,GAAIsR,QAAQtR,GAAGe,QAAUuQ,QAAQtR,GAAGe,OAAOxR,KAAKyU,eAAiB/Q,UAAW,CACxEwN,KAAKe,YAAYhO,MAAMkmB,YAAapI,QAAQtR,GAAGe,OAAOxR,KAAKyU,eAC3DvD,KAAKgF,SAAS6L,QAAQtR,GAAGe,OAAO0C,UAAUjN,OAAOgL,YAAYhO,MACzD2B,KAAM7F,SAASC,KAAKqC,KAAKkqB,WACzBla,GAAI0P,QAAQtR,GAAGe,OAAOxR,KAAKuS,IAC3BlT,MAAO0iB,QAAQtR,GAAGe,OAAOxR,KAAKyU,sBAIzC,GAAIjS,UACIA,QAAQF,SACTE,QAAQD,MACNC,QAAQD,IAAI+oB,QAAU,KAAO9oB,QAAQD,IAAI+oB,OAAS,KAAQ9oB,QAAQD,IAAI+oB,SAAW,GAAI,CAC/FE,OAASlrB,KAAKirB,sBAAsB/oB,SACpC8pB,UAAY,GACZ,IAAK5Y,EAAI,EAAGA,EAAI8X,OAAO/nB,OAAQiQ,GAAK,EAAG,CACnC,GAAI8X,OAAO/nB,OAAS,GAAK+nB,OAAO9X,GAAGrU,MAAMsb,QAAQ,YAAc,EAAG,CAG9D,SAGJ,IAAK+D,OAAOpe,KAAK4V,SAAU,CACvB5V,KAAK4V,SAASwI,KAAKzM,YAAYhO,KAAKunB,OAAO9X,IAE/C,GAAI4Y,UAAU7oB,SAAW,EAAG,CACxB6oB,UAAYd,OAAO9X,GAAGrU,UAErB,CACDitB,WAAa,KAAOd,OAAO9X,GAAGrU,OAGtC6R,KAAKe,YAAYhO,MAAMkmB,YAAamC,cAO5ChsB,KAAK8qB,mBAAqB,SAAU7oB,KAChC,GAAIA,IAAIC,QAAS,CACb,IAAI0O,KAAO3O,IAAIC,QAAQ0O,KACvB,IAAIzO,MAAQF,IAAIC,QAAQC,MAExB,GAAIyO,MAAQzO,OAASyO,KAAKkM,OAAQ,CAC9B,GAAIlM,KAAKqV,iBAAiB9jB,OAAQ,CAC9B,IAAIH,QAAU4O,KAAKsV,gBAAgB/jB,OACnC,IAAID,SACAC,MAAOA,MACPH,QAASA,SAEb4O,KAAKoT,sBAGLpT,KAAKe,eACL,IAAK3P,SAAWG,MAAM4a,WAAY,CAC9BnM,KAAKuV,kBAAkBvV,KAAMzO,MAAO,MAExCnC,KAAKuhB,uBAAuBpf,OAE5ByO,KAAKwV,sBAAsBpkB,QAASE,aAUpDlC,KAAKkmB,gBAAkB,SAAU/jB,OAC7B,GAAIA,MAAM4a,WAAY,CAClB,IAAK,IAAI5M,EAAI,EAAGA,EAAIhO,MAAM4a,WAAW5Z,OAAQgN,IAAK,CAC9C,IAAKhO,MAAM4a,WAAW5M,GAAGnO,QAAS,CAC9B,OAAO,QAInB,OAAO,MAMXhC,KAAKimB,iBAAmB,SAAU9jB,OAC9B,GAAIA,MAAM4a,WAAY,CAClB,IAAK,IAAI5M,EAAI,EAAGA,EAAIhO,MAAM4a,WAAW5Z,OAAQgN,IAAK,CAC9C,IAAIjO,QAAUC,MAAM4a,WAAW5M,GAI/B,IAAKjO,QAAQqkB,SAAU,CACnB,OAAO,QAInB,OAAO,MAGXvmB,KAAKksB,aAAe,SAAU3Z,WAAYtQ,KACtC,IAAIW,UAAWuN,EAEf,GAAIlO,IAAIC,QAAQ4b,SAAW1a,WACpBnB,IAAI2O,KAAKsB,UAAUxP,GAAGT,IAAIC,QAAQ4b,UAAY1a,UAAW,CAC5DR,UAAYX,IAAI2O,KAAKsB,UAAUxP,GAAGT,IAAIC,QAAQ4b,QAAQlb,eAGtDA,UAAY,KAChB,GAAIA,YAAcQ,UAAW,CAEzBR,UAAY,KACZ,IAAKuN,EAAI,EAAGA,EAAIlO,IAAI2O,KAAKsB,UAAU6K,WAAW5Z,OAAQgN,IAAK,CACvD,GAAIlO,IAAI2O,KAAKsB,UAAU6K,WAAW5M,GAAG9L,MAAQpC,IAAIC,QAAQ4b,OAAQ,CAC7Dlb,UAAYX,IAAI2O,KAAKsB,UAAU6K,WAAW5M,GAC1C,OAGRlO,IAAI2O,KAAKsB,UAAUxP,GAAGT,IAAIC,QAAQ4b,QAAQlb,UAAYA,UAE1D,GAAIA,YAAc,MAAQA,UAAUwf,UAAW,CAC3C,IACI,IAAIA,UAAY3iB,SAASC,KAAKqC,KAAK,QAAUa,UAAUwf,UAAU5I,eACjE,GAAI4I,YAAc,KAAM,CACpB,MAAM,IAAI3hB,MAAM8J,IAAIyF,WAAW,aAAc,qBACzC,oCAER,GAAI/N,IAAI2O,KAAKsB,UAAUF,aAAe5O,UAAW,CAC7C,MAAM,IAAI3C,MAAM8J,IAAIyF,WAAW,aAAchQ,KAAKkS,UAAU7N,KACxD,+CAER,IAAI8nB,kBACJ,GAAIlqB,IAAI2O,KAAKuO,YAAa,CACtBgN,kBAAoBlqB,IAAI2O,KAAKsB,UAAUS,kBAEtC,GAAI1Q,IAAI2O,KAAKsB,UAAUyL,eAAiBva,UAAW,CACpD+oB,kBAAoBlqB,IAAI2O,KAAKsB,UAAUyL,kBAEtC,GAAI1b,IAAI2O,KAAKsB,UAAUka,iBAAmBhpB,UAAW,CACtD+oB,kBAAoBlqB,IAAI2O,KAAKsB,UAAUka,mBAEtC,CACD,MAAM,IAAI3rB,MAAM8J,IAAIyF,WAAW,aAAc,KAGjD,IAAI4L,MAAQ,MACZ,IAAKzL,EAAI,EAAGA,EAAIvN,UAAU+R,OAAOxR,OAAQgN,IAAK,CAC1C,GAAIvN,UAAU+R,OAAOxE,GAAG9L,MAAQ8nB,kBAAmB,CAC/C,GAAIvpB,UAAU+R,OAAOxE,GAAG7K,KAAK+U,QAAQ,mBAAqB,EAAG,CACzD,GAAKzX,UAAU+R,OAAOxE,GAAGkc,QAAUjpB,WAC3BR,UAAU+R,OAAOxE,GAAGkc,OAAS,WAC7BzpB,UAAU+R,OAAOxE,GAAGkc,OAAS,SAC7BzpB,UAAU+R,OAAOxE,GAAGkc,OAAS,QAAU,CAC3C,MAAM,IAAI5rB,MAAM8J,IAAIyF,WAAW,aAAcpN,UAAU+R,OAAOxE,GAAGkc,MAC7DF,kBAAmBlqB,IAAIC,QAAQ4b,SAEvClC,MAAQ,KACR,QAKZ,IAAKA,MAAO,CACR,MAAM,IAAInb,MAAM8J,IAAIyF,WAAW,aAAcmc,kBAAmBlqB,IAAIC,QAAQ4b,SAEhF7b,IAAI2O,KAAK6J,WAAWxY,IAAIC,QAAQwoB,SAASyB,mBACrC/J,WAAYngB,IAAI2O,KAAKsB,UAAUF,YAAa,MAAO,MAE3D,MAAOnT,GACHoD,IAAIC,QAAQF,QAAU,MACtBC,IAAIC,QAAQ8d,UAAYnhB,KAKpCmB,KAAKsgB,0BAA4B,WAC7B,IAAIre,IAAMjC,KACV,GAAIiC,IAAIqqB,YAAc,EAAG,CACrB,IAAIpqB,QAAUD,IAAIC,QAGlB,IACIA,QAAQwoB,SAAWlmB,KAAKK,MAAM5C,IAAIqpB,cAIlC,GAAIppB,QAAQwoB,UAAYxoB,QAAQwoB,SAASA,SAAU,CAC/CxoB,QAAQwoB,SAAWxoB,QAAQwoB,SAASA,UAE1C,MAAO7rB,GACLqD,QAAQwoB,SAAWtnB,UAGvB,IACI,GAAKnB,IAAI+oB,QAAU,KAAO/oB,IAAI+oB,OAAS,KAC/B/oB,IAAI+oB,SAAW,GAAK/oB,IAAIqpB,eAAiB,GAAK,CAElDppB,QAAQF,QAAU,KAElBC,IAAI2O,KAAKoM,SAASuP,qBAAqBtqB,KACvC,UAAYA,IAAIke,aAAgB,WAAY,CACxC,IAAIvd,UACJ,GAAIX,IAAIC,QAAQ4b,SAAW1a,WACpBnB,IAAI2O,KAAKsB,UAAUxP,GAAGT,IAAIC,QAAQ4b,UAAY1a,UAAW,CAC5DR,UAAYX,IAAI2O,KAAKsB,UAAUxP,GAAGT,IAAIC,QAAQ4b,QAAQlb,eAGtDA,UAAY,KAChB,GAAKA,YAAcQ,WAAeR,YAAc,MAAQA,UAAUwf,UAC9DngB,IAAI2O,KAAKsb,aAAahqB,QAAQwoB,SAAUzoB,KAC5C,GAAIC,QAAQF,QACRC,IAAIke,YAAYle,IAAI2O,KAAM1O,QAAQF,QAASE,cAC1C,UAAYD,IAAIme,WAAc,WAC/Bne,IAAIme,UAAUne,IAAI2O,KAAM1O,QAAQF,QAASE,cAG9C,CACHA,QAAQF,QAAU,MAClB,GAAIC,IAAI+oB,SAAW,EAAG,CAClB9oB,QAAQ8d,UAAY,IAAIvf,MAAM8J,IAAIyF,WAAW,eAEjD,UAAY/N,IAAIme,WAAc,WAAY,CACtCne,IAAIme,UAAUne,IAAI2O,KAAM1O,QAAQF,QAASE,WAGnD,MAAOrD,GACLqD,QAAQF,QAAU,MAClBE,QAAQ8d,UAAYnhB,EACpB,UAAYoD,IAAIme,WAAc,WAAY,CACtCne,IAAIme,UAAUne,IAAI2O,KAAM1O,QAAQF,QAASE,UAIjDD,IAAI2O,KAAKoM,SAASiD,sBAAsBhe,IAAKC,QAAQF,QAASE,SAE9D,UAAYD,IAAIie,cAAiB,WAAY,CACzCje,IAAIie,aAAaje,IAAI2O,KAAM1O,QAAQF,QAASE,YASxDlC,KAAK6a,cAAgB,WACjB,IAAK,IAAIuD,OAAOpe,KAAK4V,SAAU,CAC3B5V,KAAK4V,SAAS5V,KAAK4V,SAASwI,KAAKzX,OAAOkU,kBAOhD7a,KAAK8a,cAAgB,WACjB,IAAK,IAAIsD,OAAOpe,KAAK4V,SAAU,CAC3B5V,KAAK4V,SAAS5V,KAAK4V,SAASwI,KAAKzX,OAAOmU,kBAOhD9a,KAAKmb,WAAa,WACd,IAAIxZ,UACJ,IAAK,IAAIyc,OAAOpe,KAAK4V,SAAU,CAC3B,IAAI6L,QAAUzhB,KAAK4V,SAAS5V,KAAK4V,SAASwI,KAAKzX,OAAOwU,aACtDxZ,OAASA,OAAO6qB,OAAO/K,SAE3B,OAAO9f,QAGX3B,KAAKkb,WAAa,WACd,IAAK,IAAIkD,OAAOpe,KAAK4V,SAAU,CAC3B,GAAI5V,KAAK4V,SAAS5V,KAAK4V,SAASwI,KAAKzX,OAAOuU,aACxC,OAAO,KAEf,OAAO,OAQXlb,KAAKyb,cAAgB,WACjB,IAAK,IAAI2C,OAAOpe,KAAK4V,SAAU,CAC3B5V,KAAK4V,SAAS5V,KAAK4V,SAASwI,KAAKzX,OAAO8U,kBAOhDzb,KAAK2b,iBAAmB,WACpB,GAAI3b,KAAKsY,iBACL,OAAOtY,KAAKsY,iBAAiBqD,mBACjC,MAAM,IAAIlb,MAAM8J,IAAIyF,WAAW,aAAc,wBAMjDhQ,KAAK6b,iBAAmB,WACpB,GAAI7b,KAAKsY,iBACL,OAAOtY,KAAKsY,iBAAiBuD,mBACjC,MAAM,IAAIpb,MAAM8J,IAAIyF,WAAW,aAAc,wBAMjDhQ,KAAKysB,cAAgB,SAAUC,kBAC3B,IAAInP,KAEJ,GAAInc,UAAU+B,OAAS,EAAG,CAEtB,MAAM,IAAI1C,MAAMhB,SAASC,KAAK4D,YAAY,aAAc,OAAQ,gBAAiB,IAErF,GAAIlC,UAAU+B,OAAS,EAAG,CAEtB,MAAM,IAAI1C,MAAMhB,SAASC,KAAK4D,YAAY,aAAc,OAAQ,gBAAiB,IAErF,UAAYopB,kBAAoB,SAAW,CAIvC1sB,KAAKqe,eAEL,IAAKd,QAAQmP,iBAAkB,CAC3B,GAAIA,iBAAiB9E,eAAerK,MAAS,CACzC,UAAWmP,iBAAiBnP,QAAU,WAAa,CAC/Cvd,KAAKqe,YAAYd,MAAQmP,iBAAiBnP,cAKrD,GAAMmP,mBAAqBtpB,WAAespB,mBAAqB,KAAQ,CACxE1sB,KAAKqe,mBAEJ,CAED,MAAM,IAAI5d,MAAMhB,SAASC,KAAK4D,YAAY,aAAc,OAAQ,EAAG,SAC/D,oBAYZtD,KAAK2sB,YAAc,SAAUC,aAAcC,eACvC,GAAIzrB,UAAU+B,OAAS,EAAG,CAEtB,MAAM,IAAI1C,MAAMhB,SAASC,KAAK4D,YAAY,aAAc,OACpD,cAAe,IAEvB,GAAIlC,UAAU+B,SAAW,EAAG,CAExB,MAAM,IAAI1C,MAAMhB,SAASC,KAAK4D,YAAY,aAAc,OACpD,cAAe,IAEvB,UAAWspB,eAAiB,SAAU,CAElC,MAAM,IAAInsB,MAAMhB,SAASC,KAAK4D,YAAY,aAAc,OAAQ,EAAG,SAC/D,gBAGR,GAAKupB,gBAAkBzpB,UAAY,QACxBpD,KAAKqe,YAAYuO,kBAEvB,CACD5sB,KAAKqe,YAAYuO,cAAgBC,gBAOzC7sB,KAAK8sB,cAAgB,WACjB,GAAI1rB,UAAU+B,OAAS,EAAG,CAEtB,MAAM,IAAI1C,MAAMhB,SAASC,KAAK4D,YAAY,aAAc,OAAQ,gBAAiB,IAErF,OAAOtD,KAAKqe,aAKhBre,KAAK+sB,YAAc,SAAUH,cACzB,GAAIxrB,UAAU+B,OAAS,EAAG,CAEtB,MAAM,IAAI1C,MAAMhB,SAASC,KAAK4D,YAAY,aAAc,OAAQ,cAAe,IAEnF,GAAIlC,UAAU+B,OAAS,EAAG,CAEtB,MAAM,IAAI1C,MAAMhB,SAASC,KAAK4D,YAAY,aAAc,OAAQ,cAAe,IAEnF,OAAOtD,KAAKqe,YAAYuO,eAiB5B5sB,KAAKgtB,UAAY,SAASA,UAAU/rB,KAAMC,MACtC,IAAImD,KACJ,IAAI4oB,SAEJ,GAAI7rB,UAAU+B,OAAS,EAAG,CACtB,MAAM,IAAI1C,MAAM8J,IAAIyF,WAAW,aAAc,OAAQ5O,UAAU8rB,OAAO7oB,KAAO,OAGjF,UAAU,MAAU,UAAYpD,OAAS,MAAQA,OAASmC,UAAW,CACjEiB,KAAOpD,KACPgsB,SAAW/rB,SAEV,CACDmD,KAAO,KACP4oB,SAAWhsB,KAGf,GAAIoD,OAASjB,WAAaiB,OAAS,MAAQA,OAAS,GAAI,CACpDA,KAAO,QAAUrE,KAAKkS,UAAUgM,QAAQ7Z,KAAO,IAAMrE,KAAKkS,UAAU7N,KAExE,UAAU,UAAc,YAAa,CACjC4oB,SAAWxtB,SAASC,KAAKqC,KAAKorB,aAE7B,CACD,OAAQF,UACR,KAAKxtB,SAASC,KAAKqC,KAAKorB,SACxB,KAAK1tB,SAASC,KAAKqC,KAAKqrB,aACpB,MACJ,QACI,MAAM,IAAI3sB,MAAM8J,IAAIyF,WAAW,aAAc5O,UAAU8rB,OAAO7oB,QAItE,GAAIrE,KAAKmd,gBAAkB,KAAM,CAE7Bnd,KAAKmd,cAAgB,IAAI1d,SAASC,KAAKH,aAG3C,IAAI+E,QAAUtE,KAAKqtB,kCAAkCJ,UACrDjtB,KAAKmd,cAAc/Y,mBAAmBC,KAAMC,UAUhDtE,KAAKstB,UAAY,SAASA,UAAUjpB,MAChC,GAAIjD,UAAU+B,OAAS,EAAG,CACtB,MAAM,IAAI1C,MAAM8J,IAAIyF,WAAW,aAAc,OAAQ5O,UAAU8rB,OAAO7oB,KAAO,OAEjF,GAAIA,OAASjB,WAAaiB,OAAS,MAAQA,OAAS,GAAI,CACpDA,KAAO,QAAUrE,KAAKkS,UAAUgM,QAAQ7Z,KAAO,IAAMrE,KAAKkS,UAAU7N,UAEnE,UAAU,MAAU,SAAU,CAC/B,MAAM,IAAI5D,MAAM8J,IAAIyF,WAAW,aAAc,OAAQ5O,UAAU8rB,OAAO7oB,KAAO,OAGjF,GAAIrE,KAAKmd,gBAAkB,KAAM,CAC7Bnd,KAAKmd,cAAgB,IAAI1d,SAASC,KAAKH,aAG3C,IAAI8B,OAASrB,KAAKmd,cAAczY,qBAAqBL,MAGrD,GAAIhD,OAAQ,CACR,GAAIrB,KAAKutB,mBAAmBlsB,UAAY,MACpC,MAAM,IAAIZ,MAAM8J,IAAIyF,WAAW,aAAc3L,OAGjDrE,KAAKwtB,yBAAyBnsB,OAAQ5B,SAASC,KAAKqC,KAAKugB,YAG7D,OAAOjhB,SAAW,MAWtBrB,KAAKytB,gBAAkB,SAASA,gBAAgBxsB,KAAMC,KAAMC,MACxD,IAAIkD,KACJ,IAAIqW,QACJ,IAAIjI,UAEJ,GAAIrR,UAAU+B,OAAS,EAAG,CACtB,MAAM,IAAI1C,MAAM8J,IAAIyF,WAAW,aAAc,OAAQ5O,UAAU8rB,OAAO7oB,KAAO,OAGjF,UAAU,MAAU,SAAU,CAC1BA,KAAOpD,KACPyZ,QAAUxZ,KACVuR,UAAYtR,SAEX,CACDkD,KAAO,QAAUrE,KAAKkS,UAAUgM,QAAQ7Z,KAAO,IAAMrE,KAAKkS,UAAU7N,KACpEqW,QAAUzZ,KACVwR,UAAYvR,KAGhB,UAAU,MAAU,aAAemD,OAAS,MAAQA,OAAS,GAAI,CAC7DA,KAAO,QAAUrE,KAAKkS,UAAUgM,QAAQ7Z,KAAO,IAAMrE,KAAKkS,UAAU7N,UAEnE,UAAU,MAAU,SAAU,CAC/B,MAAM,IAAI5D,MAAM8J,IAAIyF,WAAW,aAAc,OAAQ5O,UAAU8rB,OAAO7oB,KAAO,OAGjF,GAAIqW,SAAWjb,SAASC,KAAKqC,KAAKygB,aAAc,CAC5C,MAAM,IAAI/hB,MAAM8J,IAAIyF,WAAW,aAAc5O,UAAU8rB,OAAO7oB,OAGlE,GAAIrE,KAAKmd,gBAAkB,KAAM,CAC7Bnd,KAAKmd,cAAgB,IAAI1d,SAASC,KAAKH,aAG3C,IAAI8B,OAASrB,KAAKmd,cAAczY,qBAAqBL,MAGrD,GAAIhD,OAAQ,CACR,GAAIrB,KAAKutB,mBAAmBlsB,UAAY,MACpC,MAAM,IAAIZ,MAAM8J,IAAIyF,WAAW,aAAc3L,OAEjD,IACIrE,KAAKwtB,yBAAyBnsB,OAAQqZ,QAASjI,WAEnD,MAAO5T,GACH,IAAIqR,KAAOrR,EAAE6E,QACb,MAAM,IAAIjD,MAAMyP,KAAKlJ,QAAQ,IAAIoJ,OAAO,aAAc,KAAM,qBAIpE,OAAO/O,SAAW,MAOtBrB,KAAK0tB,qBAAuB,SAASA,uBAEjC,IAAK,IAAItP,OAAOpe,KAAK4V,SAAU,CAC3B,GAAI5V,KAAK4V,SAASwI,KAAKrN,eAAiB,KACpC,OAAO,MAGf,OAAO,MAOX/Q,KAAKutB,mBAAqB,SAASA,mBAAmBI,eAClD,IAAIC,QAAU,KAEd,GAAID,gBAAkB,MAASjmB,OAAO2L,KAAKsa,eAAexqB,SAAW,EACjE,OAAO,KAGX,GAAInD,KAAK2S,aAAc,CACnB,GAAIgb,cAAc3tB,KAAK2S,cAAe,CAClC,IAAK,IAAIyL,OAAOpe,KAAK4V,SACjB,GAAI+X,cAAc3tB,KAAK2S,cAAcyL,OAAShb,UAAW,CACrDwqB,QAAU,MACV,YAIRA,QAAU,WAEb,GAAI5tB,KAAK6V,cAAe,CAEzB8X,cAAgBA,cAAc,iBAC9B,GAAIA,gBAAkBvqB,WAAauqB,cAAc3tB,KAAK6V,iBAAmBzS,UACrEwqB,QAAU,UAEb,CAEDD,cAAgBA,cAAc,iBAC9B,GAAIA,gBAAkBvqB,WAAauqB,cAAc3tB,KAAKsY,iBAAiB3R,SAAWvD,UAC9EwqB,QAAU,MAGlB,OAAOA,SAUX5tB,KAAK6tB,YAAc,SAASA,YAAYxpB,MACpC,GAAIjD,UAAU+B,OAAS,EAAG,CACtB,MAAM,IAAI1C,MAAM8J,IAAIyF,WAAW,aAAc,OAAQ5O,UAAU8rB,OAAO7oB,KAAO,OAEjF,GAAIA,OAASjB,WAAaiB,OAAS,MAAQA,OAAS,GAAI,CACpDA,KAAO,QAAUrE,KAAKkS,UAAUgM,QAAQ7Z,KAAO,IAAMrE,KAAKkS,UAAU7N,UAEnE,UAAU,MAAU,SAAU,CAC/B,MAAM,IAAI5D,MAAM8J,IAAIyF,WAAW,aAAc,OAAQ5O,UAAU8rB,OAAO7oB,KAAO,OAGjF,GAAIrE,KAAKmd,gBAAkB,KAAM,CAC7Bnd,KAAKmd,cAAgB,IAAI1d,SAASC,KAAKH,aAE3CS,KAAKmd,cAAcrY,kBAAkBT,OASzCrE,KAAKqtB,kCAAoC,SAAUS,QAE/C,IAAIH,iBAGJ,GAAI3tB,KAAK2S,aAAc,CACnB,OAAQmb,QACR,KAAKruB,SAASC,KAAKqC,KAAKorB,SACpBQ,cAAgB3tB,KAAK8nB,wBAAwB9nB,KAAK2S,cAClD,MAEJ,KAAKlT,SAASC,KAAKqC,KAAKqrB,aACpBO,cAAgB3tB,KAAK+mB,iBAAiB/mB,KAAK2S,aAAc,MACzD,YAIH,GAAI3S,KAAK6V,cAAe,CACzB,OAAQiY,QACR,KAAKruB,SAASC,KAAKqC,KAAKorB,SACpBQ,cAAgB3tB,KAAK8nB,wBAAwB,iBAC7C,MAEJ,KAAKroB,SAASC,KAAKqC,KAAKqrB,aACpBO,cAAgB3tB,KAAK+mB,iBAAiB,gBAAiB,MACvD,WAIH,CACD,OAAQ+G,QACR,KAAKruB,SAASC,KAAKqC,KAAKorB,SACpBQ,cAAgB3tB,KAAK8nB,wBAAwB,iBAC7C,MAEJ,KAAKroB,SAASC,KAAKqC,KAAKqrB,aACpBO,cAAgB3tB,KAAK+mB,iBAAiB,gBAAiB,MACvD,OAIR,OAAO4G,eAKX3tB,KAAKwtB,yBAA2B,SAAUG,cAAejT,QAASjI,WAE9D,GAAIkb,eAAkBjmB,OAAO2L,KAAKsa,eAAexqB,OAAS,EAAI,CAC1D,GAAInD,KAAK2S,aAAc,CAEnB,IAAK,IAAIyL,OAAOpe,KAAK4V,SACjB5V,KAAK+tB,qBAAqB/tB,KAAK4V,SAASwI,KAAMuP,cAAejT,QAASjI,gBAI1EzS,KAAK+tB,qBAAqB/tB,KAAKsY,iBAAkBqV,cAAejT,QAASjI,gBAE5E,GAAIiI,UAAYjb,SAASC,KAAKqC,KAAKugB,WACpCtiB,KAAKoU,cAIbpU,KAAK+tB,qBAAuB,SAAU9oB,SAAUsN,WAAYmI,QAASjI,WAGjEA,UAAYA,YAAcrP,UAAYqP,UAAYxN,SAAS8L,aAC3D,GAAI0B,YAAcrP,WAAapD,KAAKkS,UAAUF,WAAY,CACtDS,aACAA,UAAU,GAAKzS,KAAKkS,UAAUF,WAGlC,GAAIhS,KAAK2S,aAAc,CACnB,IAAIgO,oBAAsB3gB,KAAK8W,iBAE/B9W,KAAK8W,iBAAmB,MAExB,IACI7R,SAASwV,WAAWlI,WAAYmI,QAASjI,WAC3C,QAEEzS,KAAK8W,iBAAmB6J,yBAI3B,CAED3gB,KAAK2S,aAAe,gBACpB1N,SAASwV,WAAWlI,WAAYmI,QAASjI,WACzCzS,KAAK2S,aAAe,OAI5B3S,KAAKkiB,oBAAsB,SAAStf,UAAWyB,MAC3C,IAAIc,IAEJ,GAAInF,KAAKkS,UAAU8b,YAAa,CAC5B,GAAIhuB,KAAKkS,UAAU8b,YAAYprB,WAAY,CACvC,OAAO5C,KAAKkS,UAAU8b,YAAYprB,gBAGrC,CACD5C,KAAKkS,UAAU8b,eAEnB,IAAK,IAAI7oB,IAAM,EAAGA,IAAMnF,KAAKkS,UAAU6K,WAAW5Z,OAAQgC,MAAO,CAC7D,GAAInF,KAAKkS,UAAU6K,WAAW5X,KAAKG,MAAQ1C,UAAW,CAClD,OAAQ5C,KAAKkS,UAAU8b,YAAYprB,WAAa5C,KAAKkS,UAAU6K,WAAW5X,QAQtF,GAAIkY,SACArd,KAAK+hB,QAKb,UAAYra,OAAOmS,gBAAmB,WAAY,CAC9CnS,OAAOmS,eAAepa,SAASC,KAAKqC,KAAM,eACtC0D,MAAO,EACPwU,WAAY,OAEhBvS,OAAOmS,eAAepa,SAASC,KAAKqC,KAAM,cACtC0D,MAAO,EACPwU,WAAY,OAEhBvS,OAAOmS,eAAepa,SAASC,KAAKqC,KAAM,cACtC0D,MAAO,EACPwU,WAAY,OAEhBvS,OAAOmS,eAAepa,SAASC,KAAKqC,KAAM,gBACtC0D,MAAO,EACPwU,WAAY,OAEhBvS,OAAOmS,eAAepa,SAASC,KAAKqC,KAAM,SACtC0D,OAAQ,EACRwU,WAAY,OAEhBvS,OAAOmS,eAAepa,SAASC,KAAKqC,KAAM,aACtC0D,OAAQ,EACRwU,WAAY,OAEhBvS,OAAOmS,eAAepa,SAASC,KAAKqC,KAAM,UACtC0D,OAAQ,EACRwU,WAAY,OAEhBvS,OAAOmS,eAAepa,SAASC,KAAKqC,KAAM,cACtC0D,OAAQ,EACRwU,WAAY,WAEb,CACHxa,SAASC,KAAKqC,KAAKsgB,YAAc,EACjC5iB,SAASC,KAAKqC,KAAKugB,WAAa,EAChC7iB,SAASC,KAAKqC,KAAKwgB,WAAa,EAChC9iB,SAASC,KAAKqC,KAAKygB,aAAe,EAItC/iB,SAASC,KAAKqC,KAAKsZ,WAAa,EAChC5b,SAASC,KAAKqC,KAAKohB,SAAW,EAC9B1jB,SAASC,KAAKqC,KAAKuZ,WAAa,EAChC7b,SAASC,KAAKqC,KAAKwZ,WAAa,EAChC9b,SAASC,KAAKqC,KAAKqhB,WAAa,EAGhC3jB,SAASC,KAAKqC,KAAKorB,SAAW,EAC9B1tB,SAASC,KAAKqC,KAAKqrB,aAAe,EAIlC3tB,SAASC,KAAKqC,KAAK0a,sBAAwB,IAG3Chd,SAASC,KAAKqC,KAAK7B,UAAY,IAAIT,SAASE,KAAK4C,WACjD9C,SAASC,KAAKqC,KAAK7B,UAAU+tB,YAAcxuB,SAASC,KAAKqC,KACzDtC,SAASC,KAAKqC,KAAK7B,UAAUqD,SAAW,SAAU2qB,OAC9C,MAAO,QAIXzuB,SAASC,KAAKiR,WAAWzQ,UAAY,IAAIT,SAASE,KAAK4C,WACvD9C,SAASC,KAAKiR,WAAWzQ,UAAU+tB,YAAcxuB,SAASC,KAAKiR,WAC/DlR,SAASC,KAAKiR,WAAWzQ,UAAUqD,SAAW,SAAU2qB,OACpD,MAAO,cAIXzuB,SAASC,KAAK2Q,cAAcE,UAAU,OAClCkS,eAAgB,SAAS7R,KAAM+D,OAAQ/S,MACnC,IAAIoT,WACA5P,MACA8Q,UACA7Q,UACAwL,UACAhO,OACAsrB,QACAC,UACAC,SACAC,iBACA5L,aACA3a,MACAwmB,SACAT,OACAU,mBACAC,iBACI5rB,QAAU6rB,SAAW,YAAa,YAAczM,QAAS7e,WACzD2R,KAAU2Z,SAAW,OAASzM,QAAS7e,WACvCiS,MAAUqZ,SAAW,QAAUzM,QAAS7e,WACxC2O,IAAU2c,SAAW,MAAQzM,QAAS7e,WACtC0R,MAAU4Z,SAAW,WAAazM,QAAS7e,YAE/CurB,aAAe,KACfnN,MAEJ,GAAI5f,KAAKgB,YAAc,OAAQ,CAC3B4rB,sBACAF,iBAAmB1d,KAAKsR,oBAAoBtgB,KAAKgB,WACjD8f,aAAe4L,iBAAiB5L,aAEhC,GAAIA,aAAc,CACdA,aAAeA,aAAa1b,QAAQ,MAAO,IAAIka,MAAM,KACrD,IAAKnZ,MAAQ,EAAGA,MAAQ2a,aAAavf,OAAQ4E,OAAS,EAAG,CACrDymB,mBAAmB9L,aAAa3a,QAAU,MAGlD,IAAKyZ,SAAS7M,OAAQ,CAClB,GAAI6M,OAAU7M,OAAO6M,SAAWpe,WAAcqrB,gBAAgBjN,OAAQ,CAClE,IAAKzZ,MAAQ,EAAGA,MAAQ0mB,gBAAgBjN,OAAOkN,QAAQvrB,OAAQ4E,OAAS,EAAG,CACvE+lB,OAASW,gBAAgBjN,OAAOkN,QAAQ3mB,OACxC,GAAIymB,mBAAmBV,QAAS,CAC5BW,gBAAgBjN,OAAOS,QAAU6L,OACjC,OAGR,IAAKW,gBAAgBjN,OAAOS,QAAS,CACjC,MAAM,IAAIxhB,MAAM8J,IAAIyF,WAAW,aAC3Bye,gBAAgBjN,OAAOkN,QAAQvnB,KAAK,UAAWqa,UAK/D,GAAI5Q,KAAK0H,kBAAoB3D,OAAO1P,WAAa7B,UAAW,CACxDyN,UAAYD,KAAK0H,iBAAiB3R,UAEjC,CACDkK,UAAY8D,OAAO1P,SAGvB,GAAI0P,OAAOG,KAAM,CAGb,UAAWH,OAAW,OAAM,YAAcA,OAAOG,gBAAgB/Q,OAAQ,CAGrE4Q,OAAOG,KAAQpN,OAAO2L,KAAMsB,OAAOG,MAAM3R,OAAS,GAAMwR,OAAOG,SAEnEE,WAAa,GACb,IAAKjN,MAAQ,EAAGA,MAAQ4M,OAAOG,KAAK3R,OAAQ4E,OAAS,EAAG,CACpD3C,MAAQuP,OAAOG,KAAK/M,OACpBomB,QAAU,GAEV,UAAU,QAAY,SAAU,CAG5BjY,UAAY9Q,MACZmpB,SAAWnpB,MAAMiV,QAAQ,KACzB,GAAIkU,YAAc,EAAG,CACjBJ,QAAUjY,UAAU/N,UAAUomB,SAAW,GACzCrY,UAAYA,UAAU/N,UAAU,EAAGomB,UACnC,OAAOJ,QAAQ1qB,eACf,IAAK,OACL,IAAK,aACD0qB,QAAU,OACV,YAGL,CAGHjY,UAAY9Q,MAAMA,MAClB,GAAIuP,OAAOG,KAAK/M,OAAOkN,MAAQ,OAAQ,CACnCkZ,QAAUxZ,OAAOG,KAAK/M,OAAOkN,KAGrC,GAAIpE,UAAW,CAEXxL,UAAYuL,KAAKC,WAAWhK,QAAQqP,UAAUzS,eAC9C,GAAI4B,WAAaA,UAAUyB,SAAU,CACjCoP,UAAY7Q,UAAUyB,UAG9B,GAAIqnB,UAAY,OAAQ,CACpBjY,WAAa,QAEjBlB,YAAckB,UACd,GAAInO,MAAQ4M,OAAOG,KAAK3R,OAAS,EAAG,CAChC6R,YAAc,MAK1B,UAAWL,OAAa,SAAM,YAAcA,OAAO9R,kBAAkBkB,OAAQ,CACzE4Q,OAAO9R,OAAU6E,OAAO2L,KAAKsB,OAAO9R,QAAQM,QAAU,EAAKwR,OAAO9R,OAASO,UAG/E,GAAIuR,OAAO9R,OAAQ,CAEf,UAAW8R,OAAO9R,SAAW,SAAU,CACnC8rB,aAAe,MAGnBha,OAAO1P,SAAW4L,UAElB,GAAI8d,cAAiBha,OAAO1P,WAAa7B,UAAY,CACjD,MAAM,IAAI3C,MAAM8J,IAAIyF,WAAW,aAAc,mBAAoB,SAC7D,aAGR,GAAIye,gBAAgB,UAAUxM,UAAY,YAAa,CACnD,GAAI0M,aAAc,CACdP,UAAY3uB,SAASE,KAAKqF,yBACtB4L,KAAKgF,SAASjB,OAAO1P,UAAW0P,OAAO9R,YAE1C,CACDurB,UAAYzZ,OAAO9R,aAGtB,GAAI4rB,gBAAgB,UAAUxM,UAAY,WAAY,CACvD,GAAI0M,aAAc,CACdN,SAAW5uB,SAASE,KAAKyH,yBACrBwJ,KAAKgF,SAASjB,OAAO1P,UAAW0P,OAAO9R,OAAQ,UAElD,CACDwrB,SAAW1Z,OAAO9R,SAK9BA,OAAS2B,KAAKC,WACV2pB,UAAWA,UACXC,SAAUA,SACVO,QAAS5Z,WACTK,KAAMV,OAAOU,KACbN,IAAKJ,OAAOI,IACZhD,GAAI4C,OAAO5C,KAGf4C,QAAU9R,OAAQA,QAEtB,OAAO8R,UAIf,UAAWlV,SAASovB,IAAM,YACtBpvB,SAASovB,MACbpvB,SAASovB,GAAGC,WAAa,SAASA,WAAW7pB,UACzCjF,KAAK4T,UAAY3O,SACjBjF,KAAK+uB,UAAY,KACjB/uB,KAAKgvB,YAAc,KACnBhvB,KAAKivB,iBAAmB7rB,UAExBpD,KAAKkvB,QAAU,SAAU3pB,QACrB,IAAI4pB,WAEJ,IAAKnvB,KAAK4T,UAAU1C,OAChB,MAAM,IAAIzQ,MAAM8J,IAAIyF,WAAW,aAAchQ,KAAK2G,QAEtD,IAAK3G,KAAK+uB,UAAW,OAErBxpB,OAASA,OAASA,OAASvF,KAAK+uB,UAAUxpB,OAC1C4pB,WAAcnvB,KAAKgvB,aAAehvB,KAAKgvB,YAAY3qB,KAAQrE,KAAKgvB,YAAY3qB,KAAO,GAEnF,GAAIrE,KAAKivB,mBAAqB7rB,UAAW,CACrCpD,KAAKovB,aAET,IAAIlf,KAAOlQ,KAAK+uB,UAAUM,aACtBrvB,KAAK+uB,UAAUM,aAAe5vB,SAASovB,GAAGS,SAASC,cAEvDrf,KAAOA,KAAKlJ,QAAQ,IAAIoJ,OAAO,eAAgB,KAAM7K,QACrD2K,KAAOA,KAAKlJ,QAAQ,IAAIoJ,OAAO,WAAY,KAAMpQ,KAAK4T,UAAU1C,OAAOxR,KAAKuS,KAC5E/B,KAAOA,KAAKlJ,QAAQ,IAAIoJ,OAAO,aAAc,KAAM+e,YAEnD,IAAK,IAAI/pB,SAASpF,KAAK4T,UAAU1C,OAAOxR,KAAM,CAC1C,IAAI+F,MAAQzF,KAAK4T,UAAU1C,OAAOxR,KAAK0F,OACvC8K,KAAOA,KAAKlJ,QAAQ,IAAIoJ,OAAO,IAAMhL,MAAQ,IAAK,KAC7CK,QAAUrC,WAAaqC,QAAU,KAAQA,MAAQ,IAG1DzF,KAAKivB,kBAAoB/e,MAG7BlQ,KAAKovB,WAAa,WACd,GAAIpvB,KAAK+uB,UAAW,CAChB/uB,KAAKivB,iBAAmB,GACxB,IAAIO,gBAAkBC,SAASC,eAAe1vB,KAAK+uB,UAAU1qB,MAC7D,GAAImrB,gBAAiB,CACjBA,gBAAgBG,UAAY,MAKxC3vB,KAAK4vB,mBAAqB,SAAU1Z,UAAW2Z,gBAC3C,IAAIpqB,MAAQ,KAAML,MAElB,GAAIyqB,iBAAmBzsB,UAAW,CAC9B,GAAIpD,KAAKgvB,aAAehvB,KAAKgvB,YAAY3qB,KACrCwrB,eAAiB7vB,KAAKgvB,YAAY3qB,KAG1C,UAAU,GAAO,YAAcwrB,eAAgB,CAC3CzqB,MAAQ9E,EAAE,IAAMuvB,eAAiB,KAAO3Z,WACxC,IAAK9Q,OAASA,MAAMjC,SAAW,EAC3BiC,MAAQ9E,EAAE,IAAMuvB,eAAiB,WAAa3Z,UAAY,MAC9D,GAAI9Q,OAASA,MAAMjC,QAAU,EACzBsC,MAAQL,MAAM0qB,UAEjB,CACD1qB,MAAQqqB,SAASC,eAAexZ,WAChC,GAAI9Q,MAAO,CACPK,MAAQL,MAAMK,OAItB,OAAOA,OAGXzF,KAAK+vB,cAAgB,SAAU7Z,UAAWzQ,MAAOoqB,gBAC7C,IAAIzqB,MAAQ,KAEZ,GAAIyqB,iBAAmBzsB,UAAW,CAC9B,GAAIpD,KAAKgvB,aAAehvB,KAAKgvB,YAAY3qB,KACrCwrB,eAAiB7vB,KAAKgvB,YAAY3qB,KAG1C,UAAU,GAAO,YAAcwrB,eAAgB,CAC3CzqB,MAAQ9E,EAAE,IAAMuvB,eAAiB,KAAO3Z,WACxC,IAAK9Q,OAASA,MAAMjC,SAAW,EAC3BiC,MAAQ9E,EAAE,IAAMuvB,eAAiB,WAAa3Z,UAAY,MAC9D,GAAI9Q,OAASA,MAAMjC,QAAU,EACzBiC,MAAM0qB,IAAIrqB,WAEb,CACDL,MAAQqqB,SAASC,eAAexZ,WAChC,GAAI9Q,MAAO,CACPA,MAAMK,MAAQA,SAQ1BzF,KAAKuY,OAAS,SAAUsX,gBACpB,IAAK7vB,KAAK4T,UAAU1C,OAChB,MAAM,IAAIzQ,MAAM8J,IAAIyF,WAAW,aAAchQ,KAAK4T,UAAUjN,QAChE,GAAKvF,UAAU+B,SAAW,UAAc0sB,gBAAkB,SACtD,MAAM,IAAIpvB,MAAM8J,IAAIyF,WAAW,aAAc,WAAY,aAG7DhQ,KAAK4T,UAAU1C,OAAOqH,OAAO,MAE7B,IAAIrC,UACJ,IAAID,OAASjW,KAAK4T,UAAUmC,YAC5B,IAAK,IAAI5F,EAAI,EAAGA,EAAI8F,OAAO9S,OAAQgN,IAAK,CACpC+F,UAAYD,OAAO9F,GAAG9L,KACtB,GAAI6R,WAAa,MAAO,SACxB,IAAIzQ,MAAQzF,KAAK4vB,mBAAmB1Z,UAAW2Z,gBAG/C,UAAWpqB,OAAS,YAAa,CAC7B,UAAWA,OAAS,UAAYwQ,OAAO9F,GAAG7K,MAAQ,SAAU,CACxDG,MAAQzF,KAAK4T,UAAUhN,MAAMiQ,aAAapR,MACtCwQ,OAAO9F,GAAG7K,KACV2Q,OAAO9F,GAAGyG,MAAQX,OAAO9F,GAAGyG,MAAMtR,KAAO,MAEjDtF,KAAK4T,UAAU1C,OAAOxR,KAAKwW,WAAazQ,OAKhDzF,KAAK4T,UAAU1C,OAAO+K,cAEtB,OAAO,MAGXjc,KAAKgwB,QAAU,SAAUC,UACrB,IAAKjwB,KAAK4T,UAAU1C,OAChB,MAAM,IAAIzQ,MAAM8J,IAAIyF,WAAW,aAAchQ,KAAK4T,UAAUjN,QAGhE,IAAIsP,OAASjW,KAAK4T,UAAUmC,YAC5B,IAAK,IAAI5F,EAAI,EAAGA,EAAI8F,OAAO9S,OAAQgN,IAAK,CACpCnQ,KAAK+vB,cAAc9Z,OAAO9F,GAAG9L,KAAMrE,KAAK4T,UAAU1C,OAAOxR,KAAKuW,OAAO9F,GAAG9L,MAAO4rB,UAEnFjwB,KAAK+vB,cAAc,MAAO/vB,KAAK4T,UAAU1C,OAAOxR,KAAKuS,IAAKge,WAG9DjwB,KAAKkwB,aAAe,WAChB,IAAKlwB,KAAK+uB,UAAW,OAErB,IAAIoB,WAAanwB,KACjB,IAAIwvB,gBACJ,UAAU,GAAO,WAAY,CACzBA,gBAAkBlvB,EAAE,IAAMN,KAAK+uB,UAAU1qB,MACzC,GAAImrB,iBAAmBA,gBAAgBrsB,QAAU,EAAG,CAChDqsB,gBAAgBY,KAAKpwB,KAAKivB,iBAAmBjvB,KAAKivB,iBAAmB,IACrE,IACI,GAAIO,gBAAgBa,KAAK,iBAAmB,eAC9Bb,gBAAgBc,aAAe,WAAY,CACrDd,gBAAgBc,WAAW,eAE1B,CACDd,gBAAgBe,SAAS,YAGjC,MAAO1xB,KAKX,GAAImB,KAAK+uB,UAAUyB,SAAU,CAEzBlwB,EAAE,IAAMN,KAAK+uB,UAAU1qB,KAAO,OAAOosB,KACjC,WACInwB,EAAEN,MAAM0wB,KAAK,QACT,WACI,IAAIzd,SAAWkd,WAAWQ,kBAAkB3wB,MAC5CmwB,WAAWH,UACX,UAAWG,WAAWpB,UAAkB,UAAK,WAAY,CACrDoB,WAAWpB,UAAU6B,SAAS/I,MAAO7nB,KAAMiT,oBAMlE,CACDuc,gBAAkBC,SAASC,eAAe1vB,KAAK+uB,UAAU1qB,MACzD,GAAImrB,gBAAiB,CACjBA,gBAAgBG,UAAY3vB,KAAKivB,iBAGrC,GAAIjvB,KAAK+uB,UAAUyB,SAAU,CACzB,IAAIhU,QAAUiT,SAASC,eAAe1vB,KAAK+uB,UAAU1qB,MACrD,GAAImY,SAAWA,QAAQqU,kBAAoB,EAAG,CAC1C,IAAK,IAAI1gB,EAAI,EAAGA,EAAIqM,QAAQsU,SAAS3tB,OAAQgN,IAAK,CAC9CqM,QAAQsU,SAAS3gB,GAAG4gB,QAAU,WAC1B,IAAI9d,SAAWjT,KAAK2wB,kBAAkB3wB,MACtCA,KAAKgwB,UACL,UAAWG,WAAWpB,UAAkB,UAAK,WAAY,CACrDoB,WAAWpB,UAAU6B,SAAS/I,MAAO7nB,KAAMiT,eAQnEjT,KAAKivB,iBAAmB7rB,WAG5BpD,KAAKgxB,cAAgB,SAAU5W,QAC3B,IAAIjK,EAEJ,IAAKnQ,KAAK4T,UAAU9C,QAChB,MAAO,GACX,KAAMsJ,kBAAkBrW,OACpBqW,OAAS,SACR,CACD,IAAI6W,aACJ,IAAK9gB,EAAI,EAAGA,EAAIiK,OAAOjX,OAAQgN,IAAK,CAChC8gB,UAAU7W,OAAOjK,IAAMiK,OAAOjK,GAElCiK,OAAS6W,UAEb,IAAIC,SACJ,IAAK9W,QAAUA,OAAO,OAAQ,CAC1B8W,SAAW,4DAGXA,SAAW,GACfA,UAAY,sCAEZ,IAAK/gB,EAAI,EAAGA,EAAInQ,KAAK4T,UAAU9C,QAAQ3N,OAAQgN,IAAK,CAChD,IAAI+F,UAAYlW,KAAK4T,UAAU9C,QAAQX,GAAG9L,KAC1C,GAAI6R,WAAa,MAAO,SACxB,GAAIA,UAAU/S,OAAS,GAAK+S,UAAUib,OAAO,IAAM,IAAK,SACxD,GAAI/W,QAAUA,OAAOlE,aAAe9S,UAAW,SAC/C,IAAIguB,WAAapxB,KAAK4T,UAAU9C,QAAQX,GAAGkhB,MACvCrxB,KAAK4T,UAAU9C,QAAQX,GAAGkhB,MAAQrxB,KAAK4T,UAAU9C,QAAQX,GAAG9L,KAChE,IAAI6L,KAAQlQ,KAAKgvB,aAAehvB,KAAKgvB,YAAYsC,cAC7CtxB,KAAKgvB,YAAYsC,cAAgB7xB,SAASovB,GAAGS,SAASiC,eAC1DrhB,KAAOA,KAAKlJ,QAAQ,IAAIoJ,OAAO,cAAe,KAAMghB,YACpDlhB,KAAOA,KAAKlJ,QAAQ,IAAIoJ,OAAO,aAAc,KAAMpQ,KAAK4T,UAAU9C,QAAQX,GAAG9L,MAC7E6sB,UAAYhhB,KAEhBghB,UAAY,cACZ9W,OAAS,KACT,OAAO8W,UAGXlxB,KAAK2wB,kBAAoB,SAAUa,cAC/B,IAAIzf,GAAKyf,aAAaC,aAAa,WACnC,OAAOzxB,KAAK4T,UAAUkF,SAAS/G,KAGnC/R,KAAK0xB,cAAgB,SAAU7B,gBAC3B,IAAI9d,GAAK/R,KAAK4vB,mBAAmB,MAAOC,gBACxC,OAAO7vB,KAAK4T,UAAUkF,SAAS/G,KAGnC/R,KAAK2xB,gBAAkB,SAAUttB,MAC7B,UAAU,GAAO,WAAY,CACzB,IAAImY,QAAUlc,EAAE,IAAM+D,MACtB,IAAKmY,SAAWA,QAAQrZ,SAAW,EAAG,CAClCqZ,QAAUlc,EAAE,UAAY+D,KAAO,MAC/B,GAAImY,SAAWA,QAAQrZ,QAAU,EAAG,CAChC,IAAI4O,GAAKyK,QAAQ6T,KAAK,MACtB,GAAIte,GACA,OAAOA,KAIvB,OAAO1N,MAGXrE,KAAK4xB,cAAgB,SAASA,cAAc7Q,KACxC,IAAKA,YAAc,KAAS,SACxB,MAAM,IAAItgB,MAAM8J,IAAIyF,WAAW,aAAc5O,UAAU8rB,OAAO7oB,KAAM,WACxE,IAAK0c,IAAI1c,aAAgB0c,IAAQ,MAAK,SAClC,MAAM,IAAItgB,MAAM8J,IAAIyF,WAAW,aAAc5O,UAAU8rB,OAAO7oB,KAAM,SACxErE,KAAKgvB,YAAcjO,IACnB/gB,KAAKgvB,YAAY3qB,KAAOrE,KAAK2xB,gBAAgB3xB,KAAKgvB,YAAY3qB,OAElErE,KAAK6xB,YAAc,SAASA,YAAY9Q,KACpC,IAAKA,YAAc,KAAS,SACxB,MAAM,IAAItgB,MAAM8J,IAAIyF,WAAW,aAAc5O,UAAU8rB,OAAO7oB,KAAM,WACxE,IAAK0c,IAAI1c,aAAgB0c,IAAQ,MAAK,SAClC,MAAM,IAAItgB,MAAM8J,IAAIyF,WAAW,aAAc5O,UAAU8rB,OAAO7oB,KAAM,SACxE,GAAI0c,IAAIxb,eAAkBwb,IAAQ,MAAK,SACnC,MAAM,IAAItgB,MAAM8J,IAAIyF,WAAW,aAAc5O,UAAU8rB,OAAO7oB,KAAM,WAExErE,KAAK+uB,UAAYhO,IACjB/gB,KAAK+uB,UAAU1qB,KAAOrE,KAAK2xB,gBAAgB3xB,KAAK+uB,UAAU1qB,MAC1D,IAAKrE,KAAK+uB,UAAUxpB,OAAQ,CACxB,UAAU,GAAO,WAAY,CACzB,IAAK,IAAI4K,EAAI,EAAGA,EAAInQ,KAAK4T,UAAU9C,QAAQ3N,OAAQgN,IAAK,CACpD,IAAI+F,UAAYlW,KAAK4T,UAAU9C,QAAQX,GAAG9L,KAE1C,IAAIe,MAAQ9E,EAAE,IAAMN,KAAK+uB,UAAU1qB,KAAO,WAAa6R,UAAY,MACnE,GAAI9Q,OAASA,MAAMjC,QAAU,EAAG,CAC5BiC,MAAMgrB,KAAK,IAAMla,UAAY,OAIzC,IAAIhG,KAAOuf,SAASC,eAAe1vB,KAAK+uB,UAAU1qB,MAAMsrB,UACxD,IAAImC,IAAM5hB,KAAKmK,QAAQ,QACvB,GAAIyX,MAAQ,EAAG,CAEX5hB,KAAOA,KAAK/H,UAAU,EAAG2pB,KAAO,yBAA2B5hB,KAAK/H,UAAU2pB,IAAM,GAEpF9xB,KAAK+uB,UAAUM,aAAenf,QAM1CzQ,SAASovB,GAAGS,SAAW,SAASA,WAE5B,UAAWluB,UAAU,IAAO,SAAU,CAClC,IAAI4B,KAAO5B,UAAU,GACrB,IAAK,IAAI+V,KAAKnU,KAAM,CAChB,GAAImU,GAAK,OAAQ,CACbnX,KAAK4G,MAAQ5D,KAAKmU,OAEjB,CACDnX,KAAKmX,GAAKnU,KAAKmU,KAK3BnX,KAAK+xB,mBAAqB,KAC1B/xB,KAAKgyB,eACL,IAAIC,IAAM,EACV,IAAK,IAAI7T,OAAOpe,KAAK4G,MAAMgP,SAAU,CACjC5V,KAAKoe,KAAOpe,KAAKgyB,YAAY5T,KAAO,IAAI3e,SAASovB,GAAGC,WAAW9uB,KAAK4G,MAAMgP,SAASwI,MACnF,IAAKpe,KAAK+xB,mBACN/xB,KAAK+xB,mBAAqB/xB,KAAKgyB,YAAY5T,KAC/C6T,MAEJ,GAAIA,KAAO,EAAG,CACVjyB,KAAK+xB,mBAAqB,KAG9B/xB,KAAKkvB,QAAU,SAAU3pB,QACrB,GAAIvF,KAAK+xB,mBAAoB,CACzB/xB,KAAK+xB,mBAAmB7C,QAAQ3pB,aAGhC,MAAM,IAAI9E,MAAM8J,IAAIyF,WAAW,aAAc,eAGrDhQ,KAAKovB,WAAa,WACd,GAAIpvB,KAAK+xB,mBAAoB,CACzB/xB,KAAK+xB,mBAAmB3C,kBAGxB,MAAM,IAAI3uB,MAAM8J,IAAIyF,WAAW,aAAc,kBAGrDhQ,KAAKuY,OAAS,SAAUsX,gBACpB,GAAIzuB,UAAU+B,SAAW,EACrB,MAAM,IAAI1C,MAAM8J,IAAIyF,WAAW,aAAc,WAAY,aAC7D,GAAIhQ,KAAK+xB,mBAAoB,CACzB,OAAO/xB,KAAK+xB,mBAAmBxZ,OAAOsX,qBAGtC,MAAM,IAAIpvB,MAAM8J,IAAIyF,WAAW,aAAc,cAGrDhQ,KAAKgwB,QAAU,SAAUH,gBACrB,GAAI7vB,KAAK+xB,mBAAoB,CACzB/xB,KAAK+xB,mBAAmB/B,QAAQH,qBAGhC,MAAM,IAAIpvB,MAAM8J,IAAIyF,WAAW,aAAc,eAGrDhQ,KAAKkwB,aAAe,WAChB,GAAIlwB,KAAK+xB,mBAAoB,CACzB/xB,KAAK+xB,mBAAmB7B,oBAGxB,MAAM,IAAIzvB,MAAM8J,IAAIyF,WAAW,aAAc,oBAGrDhQ,KAAKgxB,cAAgB,SAAU5W,QAC3B,GAAIpa,KAAK+xB,mBAAoB,CACzB,OAAO/xB,KAAK+xB,mBAAmBf,cAAc5W,aAG7C,MAAM,IAAI3Z,MAAM8J,IAAIyF,WAAW,aAAc,qBAGrDhQ,KAAK2wB,kBAAoB,SAAUa,cAC/B,GAAIxxB,KAAK+xB,mBAAoB,CACzB,OAAO/xB,KAAK+xB,mBAAmBpB,kBAAkBa,mBAGjD,MAAM,IAAI/wB,MAAM8J,IAAIyF,WAAW,aAAc,yBAGrDhQ,KAAK0xB,cAAgB,SAAU7B,gBAC3B,GAAI7vB,KAAK+xB,mBAAoB,CACzB,OAAO/xB,KAAK+xB,mBAAmBL,cAAc7B,qBAG7C,MAAM,IAAIpvB,MAAM8J,IAAIyF,WAAW,aAAc,qBAGrDhQ,KAAK4xB,cAAgB,SAAU7Q,KAC3B,GAAI/gB,KAAK+xB,mBACL,OAAO/xB,KAAK+xB,mBAAmBH,cAAc7Q,KACjD,MAAM,IAAItgB,MAAM8J,IAAIyF,WAAW,aAAc,qBAGjDhQ,KAAK6xB,YAAc,SAAU9Q,KACzB,GAAI/gB,KAAK+xB,mBACL,OAAO/xB,KAAK+xB,mBAAmBF,YAAY9Q,KAC/C,MAAM,IAAItgB,MAAM8J,IAAIyF,WAAW,aAAc,oBAIrDvQ,SAASovB,GAAGS,SAAS4C,qBAAuB,yCACxC,sFACJzyB,SAASovB,GAAGS,SAAS6C,sBAAwB,iCACzC,8CACA,wFACJ1yB,SAASovB,GAAGS,SAASC,cAAgB9vB,SAASovB,GAAGS,SAAS4C,qBAC1DzyB,SAASovB,GAAGS,SAASiC,eAAiB9xB,SAASovB,GAAGS,SAAS6C,sBAE3D1yB,SAASovB,GAAGS,SAAS8C,gBAAkB,SAAUC,UAC7C5yB,SAASovB,GAAGS,SAASC,cAAgB8C,SAAWA,SAAW5yB,SAASovB,GAAGS,SAAS4C,sBAGpFzyB,SAASovB,GAAGS,SAASgD,iBAAmB,SAAUD,UAC9C5yB,SAASovB,GAAGS,SAASiC,eACjBc,SAAWA,SAAW5yB,SAASovB,GAAGS,SAAS6C,wBAr7OvD,IAg9OA,WAII,GAAI1yB,WAAa2D,UAAW,CACxB3D,YAEJ,GAAIA,SAASC,OAAS0D,UAAW,CAC7B3D,SAASC,QAGbD,SAASC,KAAK8d,mBACd/d,SAASC,KAAK8d,gBAAgB+U,aAC9B9yB,SAASC,KAAK8d,gBAAgBgV,cAC9B/yB,SAASC,KAAK8d,gBAAgBrM,SAC9B1R,SAASC,KAAK8d,gBAAgBiV,aAC9BhzB,SAASC,KAAK8d,gBAAgBkV,iBAU9BjzB,SAASC,KAAK8d,gBAAgBmV,YAAc,SAAU5gB,GAAI6gB,UACtD,GAAInzB,SAASC,KAAK8d,gBAAgBgV,WAAWzgB,MAAQ3O,UAAW,CAC5D3D,SAASC,KAAK8d,gBAAgBgV,WAAWzgB,IAAM6gB,aAE9C,CACD,MAAM,IAAInyB,MAAM,qBAAuBsR,GAAK,2BAGpDtS,SAASC,KAAK8d,gBAAgBC,YAAc,SAAU1L,IAClD,OAAOtS,SAASC,KAAK8d,gBAAgBgV,WAAWzgB,KAEpDtS,SAASC,KAAK8d,gBAAgBqV,WAAa,SAAU9gB,GAAImM,SACrD,GAAIze,SAASC,KAAK8d,gBAAgB+U,UAAUxgB,MAAQ3O,UAAW,CAC3D3D,SAASC,KAAK8d,gBAAgB+U,UAAUxgB,IAAMmM,YAE7C,CACD,MAAM,IAAIzd,MAAM,oBAAsBsR,GAAK,2BAGnDtS,SAASC,KAAK8d,gBAAgBS,WAAa,SAAUlM,IACjD,OAAOtS,SAASC,KAAK8d,gBAAgB+U,UAAUxgB,KAEnDtS,SAASC,KAAK8d,gBAAgBsV,WAAa,SAAUC,WAAYC,SAC7D,GAAIvzB,SAASC,KAAK8d,gBAAgBiV,UAAUM,cAAgB3vB,UAAW,CACnE3D,SAASC,KAAK8d,gBAAgBiV,UAAUM,YAAcC,YAErD,CACD,MAAM,IAAIvyB,MAAM,wBAA0BsyB,WAAa,uBAI/DtzB,SAASC,KAAK8d,gBAAgByV,eAAiB,SAAUF,WAAYG,aACjE,GAAIzzB,SAASC,KAAK8d,gBAAgBkV,cAAcK,cAAgB3vB,UAAW,CACvE3D,SAASC,KAAK8d,gBAAgBkV,cAAcK,YAAcG,gBAEzD,CACD,MAAM,IAAIzyB,MAAM,wBAA0BsyB,WAAa,uBAG/DtzB,SAASC,KAAK8d,gBAAgB2V,WAAa,SAAUJ,YACjD,IACI,OAAOtzB,SAASC,KAAK8d,gBAAgBiV,UAAUM,YAEnD,MAAOl0B,GACH,OAAO,OAIfY,SAASC,KAAK8d,gBAAgB4V,aAAe,SAAUJ,SACnD,IAAIK,YACAC,aACAC,YACArV,QACAsV,SAAW/zB,SAASC,KAAK8d,gBAAgB+U,UACzCkB,UAAYh0B,SAASC,KAAK8d,gBAAgBgV,WAC1CkB,SAAWj0B,SAASC,KAAK8d,gBAAgBiV,UACzCkB,aAAel0B,SAASC,KAAK8d,gBAAgBkV,cAIjD,IAAKW,eAAeG,SAAU,CAC1BtV,QAAU,KACV,GAAIsV,SAASH,aAAarW,WAAagW,QAAS,CAC5C9U,QAAUsV,SAASH,oBACZG,SAASH,aAGpB,IAAKnV,QAAS,CACV,SAGJ,IAAKoV,gBAAgBG,UAAW,CAC5B,GAAIA,UAAUH,cAAcpV,UAAYA,QAAS,QACtCuV,UAAUH,gBAM7B,IAAKC,eAAeG,SAAU,CAC1B,GAAIA,SAASH,eAAiBP,QAAS,QAC5BU,SAASH,aAEhB,GAAGI,aAAaJ,aAAc,QACnBI,aAAaJ,iBAUpC,SAASK,qBAAqBlW,KAC1B,IAAImW,aACAC,UAAY,KAEhB,UAAW,MAAU,SAAU,CAC3BpW,IAAIwD,MAAM,IAAIhd,QAAQ,SAAU6vB,GAC5B,GAAIA,IAAM,IAAK,CACXD,UAAY,QACT,GAAIC,IAAM,IAAK,CAClB,GAAID,UAAW,CACXD,UAAUlwB,KAAKmwB,WAEnBA,UAAY,UACT,GAAIA,YAAc,KAAM,CAC3BA,WAAaC,KAIzB,OAAOF,UAOXp0B,SAASC,KAAK8d,gBAAgBwW,WAAa,SAAUR,SAAUR,SAC3D,IAAI3uB,KAAMoB,MAEV,IAAK+tB,SAAU,CACX,MAAM,IAAI/yB,MAAM,oDAEpB,GAAI+yB,oBAAoBzvB,MAAO,CAI3ByvB,SAAStvB,QAAQ,SAAUga,SAEvB,GAAIze,SAASC,KAAK8d,gBAAgBS,WAAWC,QAAQ7Z,QAAUjB,UAAW,CACtE,MAAM,IAAI3C,MAAM,oBAAsByd,QAAQ7Z,KAAO,yBAGzD,GAAI6Z,QAAQuV,qBAAqB1vB,MAAO,CACpCma,QAAQuV,UAAUvvB,QAAQ,SAAU0uB,UAChC,GAAInzB,SAASC,KAAK8d,gBAAgBC,YAAYmV,SAASvuB,QAAUjB,UAAW,CACxE,MAAM,IAAI3C,MAAM,qBAAuBmyB,SAASvuB,KAAO,gCAI9D,CACD,MAAM,IAAI5D,MAAM,4CAIxB,IAAK,IAAI2S,EAAI,EAAGA,EAAIogB,SAASrwB,OAAQiQ,IAAK,CACtCogB,SAASpgB,GAAG4J,SAAWgW,QACvBhzB,KAAK6yB,WAAWW,SAASpgB,GAAG/O,KAAMmvB,SAASpgB,IAC3C,IAAIqgB,UAAYD,SAASpgB,GAAGqgB,UAC5B,IAAIQ,YAAcT,SAASpgB,GAAG8gB,QAC9B,GAAIT,qBAAqB1vB,MAAO,CAC5B,IAAK,IAAIoM,EAAI,EAAGA,EAAIsjB,UAAUtwB,OAAQgN,IAAK,CACvC,IAAIyiB,SAAWa,UAAUtjB,GACzByiB,SAASlwB,MACTkwB,SAAS1U,QAAUsV,SAASpgB,GAC5BqgB,UAAUtjB,GAAGuN,IAAMuW,YAAcR,UAAUtjB,GAAGgkB,KAE9C10B,SAASC,KAAK8d,gBAAgBmV,YAAYc,UAAUtjB,GAAG9L,KAAMovB,UAAUtjB,IAGvEyiB,SAASxY,OAAS,KAClBwY,SAAStU,YAAc,KACvB,GAAIsU,SAAS3c,OAAQ,CACjB2c,SAASxY,UACTwY,SAAStU,eACTsU,SAASjgB,aAAevP,UACxBwvB,SAASxG,eAAiBhpB,UAC1B,IAAIya,WAAa,KAEjB,IAAIxK,KAAMjO,MAEV,IACI,UAAWwtB,SAAS3c,OAAO4H,YAAc,YAAa,CAClDxK,KAAO3L,OAAO2L,KAAKuf,SAAS3c,OAAO4H,YACnCA,WAAa+U,SAAS3c,OAAO4H,WAC7B,GAAIxK,KAAKlQ,QAAU,EAAG,CAClB,UAAWyvB,SAAS3c,OAAO4H,WAAWxK,KAAK,IAAIwK,YAC3C,YAAa,CAEb+U,SAASjgB,aAAeU,KAAK,QAE5B,UAAWuf,SAAS3c,OAAO4H,WAAWxK,KAAK,IAAIuD,OAChD,YAAa,CAEbgc,SAASjV,aAAetK,KAAK,GAC7BwK,WAAa+U,SAAS3c,OAAO4H,WAAWxK,KAAK,IAAIuD,MAAMiH,WACvD+U,SAASxG,eAAiBwG,SAASjV,aACnCiV,SAAStU,YAAYsU,SAASxG,gBAC1BwG,SAAS3c,OAAO4H,WAAWxK,KAAK,IAAI+gB,iBAI/C,CACD/gB,KAAO3L,OAAO2L,KAAKuf,SAAS3c,QAC5B,GAAI5C,KAAKlQ,QAAU,EAAG,CAClByvB,SAASjV,aAAetK,KAAK,GAC7B,UAAWuf,SAAS3c,OAAO5C,KAAK,IAAIuD,OAAS,YAAa,CAEtDiH,WAAa+U,SAAS3c,OAAO5C,KAAK,IAAIuD,MAAMiH,WAC5C+U,SAASxG,eAAiBwG,SAASjV,aACnCiV,SAAStU,YAAYsU,SAASxG,gBAC1BwG,SAAS3c,OAAO5C,KAAK,IAAI+gB,gBAE5B,UAAWxB,SAAS3c,OAAO5C,KAAK,IAAIwK,YAAc,YAAa,CAEhE+U,SAASjgB,aAAeU,KAAK,GAC7Buf,SAASjV,aAAe,KACxBE,WAAa+U,SAAS3c,UAKtC,MAAOpX,GACH,MAAM,IAAI4B,MAAM,+BAGpB,IAAIoQ,UACJ,GAAIgN,WAAY,CACZ,GAAI+U,SAASjgB,aAAc,CACvBkL,WAAaA,WAAW+U,SAASjgB,cAAckL,WAC/C,IAAKhN,aAAagN,WAAY,CAC1B+U,SAASxY,OAAOvJ,cAChB+hB,SAAStU,YAAYzN,WAAagN,WAAWhN,WAAWujB,WACxD,IAAIC,gBACJ,GAAIxW,WAAWhN,WAAW+F,OACnBiH,WAAWhN,WAAW+F,MAAMiH,WAAY,CAC3CwW,gBAAkBxW,WAAWhN,WAAW+F,MAAMiH,eAE7C,CACDwW,gBAAkBxW,WAAWhN,WAAWgN,WAE5C,IAAKzY,SAASivB,gBAAiB,CAC3BA,gBAAgBjvB,OAAOf,KAAOe,MAC9B,GAAIA,OAAS,MACTwtB,SAASxY,OAAOvJ,WAAWlN,KAAK0wB,gBAAgBjvB,cAI3D,CACDyL,UAAY+hB,SAASjV,aAAeiV,SAASjV,aAAe,GAC5DiV,SAASxY,OAAOvJ,cAChB,IAAKzL,SAASyY,WAAY,CACtBA,WAAWzY,OAAOf,KAAOe,MACzB,GAAIA,OAAS,MACTwtB,SAASxY,OAAOvJ,WAAWlN,KAAKka,WAAWzY,eAKvD,MAAM,IAAI3E,MAAM,oCAGpBmyB,SAASxY,OAAS,KAGtB,GAAKwY,SAASnU,qBAAqB1a,OAC5B6uB,SAASnU,UAAU,IACnBmU,SAASnU,UAAU,GAAG6V,aAAc,CACvC,MAAM,IAAI7zB,MACN,iEAGRmyB,SAAS7U,WACT,GAAI6U,SAAS7V,WAAY,CACrB,IAAK,IAAI5X,IAAM,EAAGA,IAAMytB,SAAS7V,WAAW5Z,OAAQgC,MAAO,CACvD,GAAIytB,SAAS7V,WAAW5X,KAAKgvB,KAAM,CAC/BvB,SAAS7V,WAAW5X,KAAKuY,IACrBkV,SAASlV,IAAMkV,SAAS7V,WAAW5X,KAAKgvB,SAE3C,CACDvB,SAAS7V,WAAW5X,KAAKuY,IAAMkV,SAASlV,IAE5C,IAAKkV,SAAS7V,WAAW5X,KAAKwP,OAAQ,CAClCie,SAAS7V,WAAW5X,KAAKwP,UAE7B,IAAKie,SAAS7V,WAAW5X,KAAKG,KAAM,CAChCstB,SAAS7V,WAAW5X,KAAKG,KAAO,SAIpC,IAAIivB,OAAS3B,SAAS7V,WAAW5X,KAAKG,KAAK7B,cAG3C,IAAKmvB,SAAS7V,WAAW5X,KAAKqvB,KAAM,CAChC,OAAQD,QACR,IAAK,SACD3B,SAAS7V,WAAW5X,KAAKqvB,KAAO,OAChC,MACJ,IAAK,OACD5B,SAAS7V,WAAW5X,KAAKqvB,KAAO,MAChC,MACJ,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,QACD5B,SAAS7V,WAAW5X,KAAKqvB,KAAO,MAChC,MACJ,IAAK,SACD5B,SAAS7V,WAAW5X,KAAKqvB,KAAO,SAChC,MACJ,QACI,OAKR,IAAIC,KAAO,SAAS/xB,GAAGrB,OAAQge,OAC3B,IAAIC,SAGJ,UAAW5c,GAAGob,QAAU,YAAa,CACjCpb,GAAGob,OAAS1c,UAAU,GACtBsB,GAAGgyB,WAAatzB,UAAU,GAC1B,OAGJ,IAAIue,QAAU,KACd,IAAIjC,IAAMhb,GAAGgyB,WAAWhX,IACxB,IAAI9M,KAAO5Q,KACX,IAAIiC,IAAM,KAEV,IAAIC,WACJ,IAAIiO,EAEJ,GAAI9O,OAAQ,CACR,UAAW,QAAY,SAAU,CAC7B,MAAM,IAAIZ,MAAM,4BACZiC,GAAGob,OAAS,wCAEpB,IAAIkE,SACJ,GAAI3gB,kBAAkB1C,gBACd0C,OAAO4sB,aACJ5sB,OAAO4sB,YAAY5pB,OAAS,iBAAmB,CACtDuM,KAAOvP,OAAOuP,KACd3O,IAAMZ,OACN2gB,SAAW/f,IAAI+f,SAGf9f,QAAUD,IAAIC,YAEb,CACD8f,SAAW3gB,OAGf,UAAWge,OAAS,YAAa,CAC7BA,MAAQrf,KAAK8c,WAEZ,CACDuC,MAAQsV,QAAQtV,OAGpBnd,QAAQ8f,SAAWA,SAGnB,IAAIrH,SAAYjY,GAAGgyB,WAAWpvB,KAAKkU,eAAiB,SACpD,IAAKrJ,EAAI,EAAGA,EAAIzN,GAAGgyB,WAAW/f,OAAOxR,OAAQgN,IAAK,CAC9C9L,KAAO3B,GAAGgyB,WAAW/f,OAAOxE,GAAG9L,KAC/B,OAAQ3B,GAAGgyB,WAAW/f,OAAOxE,GAAG7K,MAChC,IAAK,OACL,IAAK,QACL,IAAK,SACD,IAAIG,MAAQ,KACZ,GAAIuc,SACAvc,MAAQuc,SAAS3d,MACrB,IAAKoB,MACDA,MAAQ,GACZ,GAAIiY,IAAIrD,QAAQ,IAAMhW,KAAO,OAAS,EAAG,CACrC,MAAM,IAAI5D,MAAM,+BACRiC,GAAGgyB,WAAW/f,OAAOxE,GAAG7K,KAAO,eAC/BjB,KAAO,yBAEnBqZ,IAAMA,IAAI1W,QACN,IAAIoJ,OAAO,IAAM/L,KAAO,IAAK,KAC7BuwB,mBAAmBnvB,QACvB,MACJ,IAAK,eACL,IAAK,6BACL,IAAK,6BACD,GAAIxD,MAAQ0d,QAAS,CACjBA,QAAUqC,aAET,CACD,IAAI6S,SAAW7S,SAAS3d,MACxB,GAAIsW,WACQjY,GAAGgyB,WAAW/f,OAAOxE,GAAGkc,OACpB,gBAAgBhS,QAChB3X,GAAGgyB,WAAW/f,OAAOxE,GAAGkc,SAAW,GAAK,CACpD,IAAIyI,UAAalkB,KAAKsB,UAAUgM,QAAQsC,UAC7B5P,KAAKsB,UAAUgM,QAAQsC,SAASsU,UAC3C,GAAIA,UAAW,CAEX,UAAY,UAAc,UACdptB,OAAO2L,KAAKwhB,UAAU1xB,QAAU,UACxB0xB,SAASxwB,OAAU,SACnCwwB,SAAWA,SAASxwB,UAEvB,CAED,UAAY,UAAc,iBACNwwB,SAASxwB,OAAU,YAAc,CACjDwwB,YACAA,SAASxwB,MAAQ2d,SAAS3d,QAItC,IAAKsb,QAAS,CACVA,WAEJA,QAAQtb,MAAQwwB,SAEpB,MACJ,IAAK,gBACD,MACJ,QACI,MAAM,IAAIp0B,MAAM,kBACR,8BACAiC,GAAGgyB,WAAW/f,OAAOxE,GAAG7K,KAAO,OAK/C,GAAIoY,IAAIrD,QAAQ,OAAS,EAAG,CACxB,IAAI0a,cAAgBnB,qBAAqBlW,KACzC,IAAKvN,EAAI,EAAGA,EAAI4kB,cAAc5xB,OAAQgN,IAAK,CACvC9L,KAAO0wB,cAAc5kB,GACrB1K,MAAQ,KACR,GAAIuc,SACAvc,MAAQuc,SAAS3d,MACrB,IAAKoB,MACDA,MAAQ,GACZ,UAAW,QAAY,SAAU,CAC7BA,MAAQjB,KAAKC,UAAUgB,OAE3BiY,IAAMA,IAAI1W,QACN,IAAIoJ,OAAO,IAAM/L,KAAO,IAAK,KAC7BuwB,mBAAmBnvB,UAKnCvD,QAAQ4b,OAASpb,GAAGob,OACpB5b,QAAQmd,MAAQA,MAEhB,GAAInd,QAAQod,WAAalc,UAAW,CAChCkc,SAAW,IAAI7f,SAASE,KAAKI,SAC7BmC,QAAQod,SAAWA,SAGvB,IAAI5f,KAAOkR,KAAK6O,aAAaxd,IAAKS,GAAGgyB,WAAWF,KAC5C9W,IAAKiC,QAASzd,QAASmd,OAC3B,OAAO3f,MAIX,OAAQkzB,SAAS7V,WAAW5X,KAAKqvB,KAAK/wB,eACtC,IAAK,MACL,IAAK,OACL,IAAK,MACL,IAAK,SACD,MACJ,QACI,MAAM,IAAIhD,MAAM,wCACRmyB,SAAS7V,WAAW5X,KAAKqvB,KACzB,sCAGZ,OAAQD,QACR,IAAK,SACD,MACJ,IAAK,SACL,IAAK,OACL,IAAK,SACL,IAAK,SACL,IAAK,SACL,IAAK,QACD,UAAY3B,SAAS7U,QAAQwW,SAAY,WAAY,CACjD,MAAM,IAAI9zB,MAAM,4BACRmyB,SAAS7V,WAAW5X,KAAKG,KACzB,uDACAstB,SAASvuB,KAAO,WAGxBuuB,SAAS7U,QAAQwW,QAAUE,KAC/B,MACJ,QACI,MAAM,IAAIh0B,MAAM,wCACRmyB,SAAS7V,WAAW5X,KAAKG,KACzB,sCAIZjB,KAAOuuB,SAAS7V,WAAW5X,KAAKd,KAChC,GAAIkwB,SAAW,UAAYA,SAAW,QAAS,CAC3C3B,SAASlwB,GAAG2B,SACZuuB,SAASlwB,GAAG2B,MAAM,YAAcowB,SAE/B,CACDpwB,KAAO,IAAMkwB,OAEjBE,KAAKpwB,KAAMuuB,SAAS7V,WAAW5X,eAOlD,CACD,MAAM,IAAI1E,MAAM,0CAQxBhB,SAASC,KAAK8d,gBAAgBwX,eAAiB,SAAUC,cACrD,GAAIA,aAAc,CAGd,IAAIrC,SAAWnzB,SAASC,KAAK8d,gBAAgBC,YAAYwX,cACzD,GAAIrC,SAAU,CACV,IAAIsC,QAAU,YACd,IAAIC,YAAc,eAAiBvC,SAAS7V,WAAW5Z,OAAS,KAChE,IAAK,IAAIiC,SAASwtB,SAAS3c,OAAO4H,WAAY,CAC1CqX,SAAW,WAAa9vB,MAClB,KAGV,IAAK,IAAI+K,EAAI,EAAGA,EAAIyiB,SAAS7V,WAAW5Z,OAAQgN,IAAK,CACjDglB,aAAe,KAAOhlB,EAChB,WAAayiB,SAAS7V,WAAW5M,GAAG9L,KACpC,UAAYuuB,SAAS7V,WAAW5M,GAAGuN,IACnC,WAAakV,SAAS7V,WAAW5M,GAAG7K,KACpC,WAAastB,SAAS7V,WAAW5M,GAAGqkB,KACpC,aAAe5B,SAAS7V,WAAW5M,GAAGwE,OAAOxR,OAC7C,KAEVrE,QAAQuD,IAAI,0DACRuwB,SAASvuB,KAAMuuB,SAASlV,IAAKwX,QAASC,kBAG1Cr2B,QAAQuD,IAAI,wBAYxB5C,SAASC,KAAK01B,oBAAsB,SAASA,oBAAoBpyB,MAC7D,IAAI2D,MAAQ3D,KAAKqB,KACjBqD,OAAOmS,eACH7Z,KACA,QAEI+Z,IAAK,WACD,OAAOpT,OAEXsT,WAAY,OAIpB,IAAIob,KAAOryB,KAAKsyB,IAChB5tB,OAAOmS,eACH7Z,KACA,OAEI+Z,IAAK,WACD,OAAOsb,MAEXpb,WAAY,QAcxBxa,SAASC,KAAK61B,kBAAoB,WAC9B,IAAIC,iBACAC,cAGJ/tB,OAAOmS,eACH7Z,KACA,iBAEI+Z,IAAK,WACD,IAAI2b,OAEJ,GAAID,gBAAkB,KAAM,CACxBC,OAASlxB,KAAKC,UAAU+wB,eACxB,GAAIE,SAAW,KAAM,CACjBD,cAAgBryB,cACb,CACHqyB,cAAgBC,QAIxB,OAAOD,eAEXxb,WAAY,OASpBja,KAAK21B,mBAAqB,SAAU/I,aAAcC,eAC9C,GAAIzrB,UAAU+B,OAAS,EAAG,CAEtB,MAAM,IAAI1C,MAAMhB,SAASC,KAAK4D,YAC1B,aACA,UACA,qBACA,IAGR,GAAIlC,UAAU+B,SAAW,EAAG,CAExB,MAAM,IAAI1C,MAAMhB,SAASC,KAAK4D,YAC1B,aACA,UACA,qBACA,IAGR,UAAWspB,eAAiB,SAAU,CAElC,MAAM,IAAInsB,MAAMhB,SAASC,KAAK4D,YAC1B,aACA,UACA,EACA,SACA,uBAIR,GAAIupB,gBAAkBzpB,UAAW,QACtBoyB,cAAc5I,kBAClB,CACH4I,cAAc5I,cAAgBC,cAElC4I,cAAgB,MAGpBz1B,KAAK41B,WAAa,SAAUC,SACxB,IAAItY,KAEJ,GAAInc,UAAU+B,OAAS,EAAG,CAEtB,MAAM,IAAI1C,MAAMhB,SAASC,KAAK4D,YAAY,aAAc,UAAW,aAAc,IAErF,GAAIlC,UAAU+B,OAAS,EAAG,CAEtB,MAAM,IAAI1C,MAAMhB,SAASC,KAAK4D,YAAY,aAAc,UAAW,aAAc,IAErF,UAAWuyB,UAAY,SAAU,CAK7BL,iBACA,IAAKjY,QAAQsY,QAAS,CAClB,GAAIA,QAAQjO,eAAerK,MAAO,CAC9B,UAAWsY,QAAQtY,QAAU,WAAY,CACrCiY,cAAcjY,MAAQsY,QAAQtY,cAIvC,GAAKsY,UAAYzyB,WAAeyyB,UAAY,KAAO,CACtDL,qBACG,CAEH,MAAM,IAAI/0B,MAAMhB,SAASC,KAAK4D,YAC1B,aACA,UACA,EACA,SACA,uBAGRmyB,cAAgB,MAGpBz1B,KAAK81B,WAAa,WACd,GAAI10B,UAAU+B,OAAS,EAAG,CAEtB,MAAM,IAAI1C,MAAMhB,SAASC,KAAK4D,YAAY,aAAc,UAAW,aAAc,IAErF,OAAOkyB,eAGXx1B,KAAK+1B,mBAAqB,SAAUnJ,cAChC,GAAIxrB,UAAU+B,OAAS,EAAG,CAEtB,MAAM,IAAI1C,MAAMhB,SAASC,KAAK4D,YAAY,aAAc,UAAW,qBAAsB,IAE7F,GAAIlC,UAAU+B,OAAS,EAAG,CAEtB,MAAM,IAAI1C,MAAMhB,SAASC,KAAK4D,YAAY,aAAc,UAAW,qBAAsB,IAE7F,OAAOkyB,cAAc5I,gBAiB7BntB,SAASC,KAAK2c,QAAU,SAASA,QAAQqS,SAErC,IAAIsH,iBAAmB,MACvB,UAAYtuB,OAAOmS,iBAAoB,WAAY,CAC/Cmc,iBAAmB,KAGvB,IAAI51B,KAAOJ,KACPkzB,YACA+C,eAAiB,MACjBC,UAAY,MACZC,OAAS,MACTC,KAAO,MACPC,iCAAmC,MACnCC,2BAA6B,IAC7BC,eAAiB,KACjBC,wBAA0B,MAG1BC,gBAAkB,MAClBC,sBAAwB,gBACxBC,eAAiBD,sBACjBE,YACAC,cAAgB,KAChBC,kBAAoB,MAIpBC,gBACAC,UACAC,OACAC,wBAA0B,MAG9B,IAAKxI,SAAWA,QAAQyI,UAAY,KAAM,CACtCr4B,QAAQs4B,KACJ,oEACE,8CAIV,UAAWC,YAAc,YAAa,CAClC,UAAWA,UAAUC,YAAc,YAAa,CAC5CrB,eAAiBoB,UAAUC,UAAUxvB,MAAM,2BAC3CouB,UAAYmB,UAAUC,UAAU7zB,cAAc4W,QAAQ,YAAc,EAEpE8b,OAASkB,UAAUC,UAAUjd,QAAQ,UAAY,EAEjD+b,KAASiB,UAAUC,UAAUjd,QAAQ,aAAgB,GACzCgd,UAAUC,UAAUjd,QAAQ,YAAc,GAM9Dgc,mCAAqCH,WAAaC,QAAUC,MAY5D,SAASmB,2BACL,OAAOlB,iCAGXr2B,KAAKw3B,eAAiB,WAClBC,kBAAkB,MAClBr3B,KAAKyD,QAAQ,SAAUzD,KAAM,OAGjCJ,KAAK03B,gBAAkB,WACnBD,kBAAkB,OAClBr3B,KAAKyD,QAAQ,UAAWzD,KAAMX,SAASC,KAAK2c,QAAQsb,eAAgB,OAGxE,UAAYC,SAAW,aAAiBA,OAAuB,iBAAG,CAC9DA,OAAOC,iBAAiB,SAAU73B,KAAKw3B,eAAgB,OACvDI,OAAOC,iBAAiB,UAAW73B,KAAK03B,gBAAiB,OAgB7D,IAAII,gBACJ,IAAIvF,aACJ,IAAIwF,UAEJ/3B,KAAKg4B,cAAgB,KAErB,IAAIC,UAAY,KAEhB,GAAIjC,iBAAkB,CAClB,IAAIkC,UAAY,KAChBxwB,OAAOmS,eACH7Z,KACA,YAEI+Z,IAAK,WACD,OAAOme,WAEXje,WAAY,OAIpB,IAAIke,aAAe,oBACnBzwB,OAAOmS,eACH7Z,KACA,eAEI+Z,IAAK,WACD,OAAOoe,cAEXle,WAAY,OAIpB,IAAIme,YAAc,KAClB1wB,OAAOmS,eACH7Z,KACA,cAEI+Z,IAAK,WACD,OAAOqe,aAEXne,WAAY,OAIpBvS,OAAOmS,eACH7Z,KACA,eAEI+Z,IAAK,WACD,OAAO+d,cAEX7d,WAAY,OAIpBvS,OAAOmS,eACH7Z,KACA,YAEI+Z,IAAK,WACD,OAAOwY,WAEXtY,WAAY,OAIpB,IAAIoe,aAAe,KACnB3wB,OAAOmS,eACH7Z,KACA,eAEI+Z,IAAK,WACD,OAAOse,cAEXpe,WAAY,OAIpB,IAAIqe,iBAAmB,KACvB5wB,OAAOmS,eACH7Z,KACA,mBAEI+Z,IAAK,WACD,OAAOue,kBAEXre,WAAY,OAIpB,IAAIse,iBAAmB,KACvB7wB,OAAOmS,eACH7Z,KACA,mBAEI+Z,IAAK,WACD,OAAOwe,kBAEXte,WAAY,OAIpB,IAAIue,qBAAuB/4B,SAASC,KAAK2c,QAAQoc,eACjD/wB,OAAOmS,eACH7Z,KACA,uBAEI+Z,IAAK,WACD,OAAOye,sBAEXxe,IAAK,SAAU0e,QACX,GAAIA,OAAQ,CACRA,OAASA,OAAOj1B,cAEpB,OAAQi1B,QACR,KAAKj5B,SAASC,KAAK2c,QAAQsc,eAC3B,KAAKl5B,SAASC,KAAK2c,QAAQuc,gBAC3B,KAAKn5B,SAASC,KAAK2c,QAAQoc,eAC3B,KAAKh5B,SAASC,KAAK2c,QAAQwc,cAC3B,KAAK,KACDL,qBAAuBE,OACvBI,iBAAiB,sBAAuBJ,QACxC,MACJ,QACI,MAAM,IAAIj4B,MACN,+CACEi4B,OAAS,4BAIvBze,WAAY,OAIpB,IAAI8e,gBAAkB,KACtBrxB,OAAOmS,eACH7Z,KACA,kBAEI+Z,IAAK,WACD,OAAOgf,iBAEX9e,WAAY,OAIpBvS,OAAOmS,eACH7Z,KACA,aAEI+Z,IAAK,WACD,OAAQ/Z,KAAKg5B,cAAgBv5B,SAASC,KAAK2c,QAAQ4c,eACxCzC,yBACAD,gBAEftc,WAAY,OAIpBvS,OAAOmS,eACH7Z,KACA,SAEI+Z,IAAK,WACD,OAAOge,QAEX9d,WAAY,OAIpB,IAAIif,cAAgB,EACpB,IAAIC,WAAa,KACjBzxB,OAAOmS,eACH7Z,KACA,gBAEI+Z,IAAK,WACD,OAAOmf,eAEXlf,IAAK,SAAU0e,QACX,UAAYA,SAAW,UAAcA,QAAU,EAAI,CAC/CQ,cAAgBR,OAChBI,iBAAiB,eAAgBJ,QACjC,GAAIA,OAAS,EAAG,CAEZ,GAAI14B,KAAKg5B,cAAgBv5B,SAASC,KAAK2c,QAAQ4c,cAAe,CAC1DE,WAAap4B,WAAWf,KAAKo5B,UAAWV,cAEzC,GAAIA,SAAW,EAAG,CACrBW,aAAaF,YACbD,cAAgB,OAEjB,CACH,MAAM,IAAIz4B,MACN,wCACEi4B,OAAS,4BAIvBze,WAAY,OAIpB,IAAIqf,mBAAqB,IAAI75B,SAASC,KAAK61B,kBAC3C7tB,OAAOmS,eACH7Z,KACA,sBAEI+Z,IAAK,WACD,OAAOuf,oBAEXrf,WAAY,QAIpB,IAAIsf,cAAgB,MACpB7xB,OAAOmS,eACH7Z,KACA,kBAEI+Z,IAAK,WACD,OAAOwf,eAEXtf,WAAY,QAMpBvS,OAAOmS,eACH7Z,KACA,iBAEI+Z,IAAK,WACD,OAAO8c,eAEX7c,IAAK,SAAU0e,QACX,GAAI7B,cAAe,CACf,MAAM,IAAIp2B,MACN,kDACE,sCAIV+4B,gBAAgBd,SAEpBze,WAAY,YAGjB,CACHja,KAAKy5B,SAAW,KAChBz5B,KAAK05B,YAAc,oBACnB15B,KAAK25B,WAAa,KAClB35B,KAAK45B,eACL55B,KAAKwzB,YACLxzB,KAAKg5B,YAAc,KACnBh5B,KAAK65B,gBAAkB,KACvB75B,KAAK85B,gBAAkB,KACvB95B,KAAK4J,oBAAsBnK,SAASC,KAAK2c,QAAQoc,eACjDz4B,KAAK+5B,eAAiB,KAQ1B,SAASjB,iBAAiBkB,SAAUv0B,OAChC,IAAIsN,IACJ,GAAI3S,KAAK44B,cAAgBv5B,SAASC,KAAK2c,QAAQ4c,sBACjC,iBAAqB,UAAYrC,YAAa,CAExD7jB,IAAM6jB,YACN,GAAIoD,SAAU,CACVjnB,IAAMA,IAAM,IAAMinB,SAEtB,UAAWv0B,QAAU,YAAa,CAC9BxG,eAAesF,QAAQwO,IAAKvO,KAAKC,UAAUgB,UAKvD,SAASw0B,oBAAoBD,UACzB,IAAIjnB,IACApO,QACAc,MAAQ,KACZ,UAAWxG,iBAAmB,UAAY23B,YAAa,CACnD7jB,IAAM6jB,YACN,GAAIoD,SAAU,CACVjnB,IAAMA,IAAM,IAAMinB,SAEtBr1B,QAAU1F,eAAe2F,QAAQmO,KACjC,GAAIpO,UAAY,KAAM,CAClB,IACIc,MAAQjB,KAAKK,MAAMF,SACrB,MAAO9F,GACL4G,MAAQ,MAGhB,OAAOA,OAIf,SAASy0B,iBAAiBF,UACtB,IAAIjnB,IACJ,UAAW,iBAAqB,UAAY6jB,YAAa,CACrD7jB,IAAM6jB,YACN,GAAIoD,SAAU,CACVjnB,IAAMA,IAAM,IAAMinB,SAClB/6B,eAAe8F,WAAWgO,OAKtC,SAASonB,sBACL,GAAIvD,YAAa,CACbkC,iBAAiB,cAAe14B,KAAK44B,aACrCF,iBAAiB,WAAY14B,KAAKq5B,UAClCX,iBAAiB,aAAc14B,KAAKu5B,YACpCb,iBAAiB,kBAAmB14B,KAAKy5B,iBACzCf,iBAAiB,sBAAuB14B,KAAKwJ,qBAC7CkvB,iBAAiB,eAAgB14B,KAAKg6B,cACtCtB,iBAAiB,kBAAmBrC,iBACpCqC,iBAAiB,iBAAkBnC,gBACnCmC,iBAAiB,kBAAmB14B,KAAK05B,iBACzChB,iBAAiB,iBAAkBvC,gBACnCuC,iBAAiB,0BAA2BtC,yBAC5C,GAAIp2B,KAAKy2B,cAAe,CACpBiC,iBACI,sBAEIxD,IAAKl1B,KAAKy2B,cAAcvB,IACxB1rB,oBAAqBxJ,KAAKy2B,cAAcjtB,sBAIpDkvB,iBAAiBlC,YAAa,OAItC,SAASyD,sBACL,GAAIzD,YAAa,CACb,GAAIqD,oBAAoBrD,aAAc,CAClCsD,iBAAiB,eACjBA,iBAAiB,YACjBA,iBAAiB,cACjBA,iBAAiB,mBACjBA,iBAAiB,mBACjBA,iBAAiB,kBACjBA,iBAAiB,2BACjBA,iBAAiB,uBACjBA,iBAAiB,gBACjBA,iBAAiB,mBACjBA,iBAAiB,kBACjBA,iBAAiB,sBACjBA,iBAAiBtD,eAK7B,SAAS0D,0BAA0BvnB,KAC/B,IAAIwnB,uBACJ,GAAIN,oBAAoBlnB,KAAM,CAC1BynB,eAAeP,oBAAoB,eAAgBj6B,MACnDy6B,YAAYR,oBAAoB,YAAaj6B,MAC7C06B,cAAcT,oBAAoB,cAAej6B,MACjD26B,mBAAmBV,oBAAoB,mBAAoBj6B,MAC3D46B,mBAAmBX,oBAAoB,mBAAoBj6B,MAC3Dy3B,kBAAkBwC,oBAAoB,mBACtCY,2BAA2BZ,oBAAoB,4BAC/C75B,KAAKwJ,oBAAsBqwB,oBAAoB,uBAC/C75B,KAAKg6B,aAAeH,oBAAoB,gBACxCa,mBAAmBb,oBAAoB,oBACvCc,kBAAkBd,oBAAoB,mBAMtC,IAAK75B,KAAKy2B,cAAe,CACrB0D,uBAAyBN,oBAAoB,sBAC7C,GAAIM,uBAAwB,CACxBf,gBAAgB,IAAI/5B,SAASC,KAAKoC,uBAAuBy4B,4BAMzE,SAASE,YAAYO,QAASC,eAC1B,GAAIjF,iBAAkB,CAClBkC,UAAY8C,YACT,CACHC,cAAcxB,SAAWuB,QAG7BlC,iBAAiB,WAAYkC,SAGjC,SAASE,eAAexS,OAAQuS,eAC5B,GAAIjF,iBAAkB,CAClBmC,aAAezP,WACZ,CACHuS,cAAcvB,YAAchR,QAIpC,SAASgS,cAAchd,IAAKud,eACxB,GAAIjF,iBAAkB,CAClBoC,YAAc1a,QACX,CACHud,cAActB,WAAajc,IAG/Bob,iBAAiB,aAAcpb,KAGnC,SAASyd,gBAAgBzd,IAAKud,eAC1B,GAAIjF,iBAAkB,CAClB8B,aAAan0B,KAAK+Z,SACf,CACHud,cAAcrB,YAAYj2B,KAAK+Z,MAIvC,SAAS0d,YAAYC,cAAeJ,eAChC,GAAIjF,iBAAkB,CAClBzD,UAAU5uB,KAAK03B,mBACZ,CACHJ,cAAczH,SAAS7vB,KAAK03B,gBAIpC,SAASC,YAAYnf,aACjBoW,UAAUruB,QAAQ,SAAUga,SACxB,GAAIA,QAAQ7Z,OAAS8X,YAAa,CAC9B,OAAO+B,WAGf,OAAO,KAGX,SAASsc,eAAe74B,OAAQs5B,eAC5B,GAAIjF,iBAAkB,CAClBqC,aAAe12B,WACZ,CACHs5B,cAAcjC,YAAcr3B,OAGhC,GAAIA,SAAWlC,SAASC,KAAK2c,QAAQ4c,cAAe,CAChDH,iBAAiB,cAAen3B,YAC7B,CAEH04B,uBAIR,SAASM,mBAAmB3P,OAAQiQ,eAChC,GAAIjF,iBAAkB,CAClBsC,iBAAmBtN,WAChB,CACHiQ,cAAcpB,gBAAkB7O,OAGpC8N,iBAAiB,kBAAmB9N,QAGxC,SAASuQ,0BAA0Bt5B,IAAKg5B,eACpC,GAAIh5B,IAAK,CACL24B,mBAAmBY,yBAAyBv5B,IAAK,uBAAwBg5B,gBAIjF,SAASL,mBAAmBa,KAAMR,eAC9B,GAAIjF,iBAAkB,CAClBuC,iBAAmBkD,SAChB,CACHR,cAAcnB,gBAAkB2B,KAGpC3C,iBAAiB,kBAAmB2C,MAGxC,SAASC,kBAAkBz5B,IAAKg5B,eAC5B,GAAIjF,iBAAkB,CAClB+C,gBAAkB92B,QACf,CACHg5B,cAAclB,eAAiB93B,KAIvC,SAASw1B,kBAAkBhyB,OACvB8wB,eAAiB9wB,MAEjBqzB,iBAAiB,iBAAkBrzB,OAGvC,SAAS+zB,gBAAgB/zB,OAErBoxB,cAAgBpxB,MAAQA,MAAQ,KAGpC,SAASo1B,2BAA2Bp1B,OAChC+wB,wBAA0B/wB,MAE1BqzB,iBAAiB,0BAA2BrzB,OAGhD,SAASq1B,mBAAmBr1B,OACxBgxB,gBAAkBhxB,MAElBqzB,iBAAiB,kBAAmBrzB,OAGxC,SAASs1B,kBAAkBt1B,OACvBkxB,eAAiBlxB,MAEjBqzB,iBAAiB,iBAAkBrzB,OAcvC,SAAS+1B,yBAAyBv5B,IAAK05B,YACnC,IAAIC,WAAa35B,IAAI45B,oBACjBC,OAEJ,GAAIF,aAAex4B,UAAW,CAC1Bw4B,WAAa35B,IAAI85B,wBACjB,GAAIH,WAAY,CACZ35B,IAAI45B,oBAAsBD,eACvB,CACH35B,IAAI45B,oBAAsB,MAGlC,GAAID,WAAY,CACZE,OAAS,IAAI1rB,OAAO,IAAMurB,WAAa,IAAK,MAC5C,GAAIC,WAAW9zB,MAAMg0B,QAAS,CAC1B,OAAO75B,IAAI+5B,kBAAkBL,aAIrC,OAAO,KAKX37B,KAAKme,WAAa,SAAUvN,MACxBmnB,OAAOp0B,KAAKiN,OAahB5Q,KAAKygB,aAAe,SAAUxe,IAAKuyB,KAAM9W,IAAK2B,MAAO4c,UACjD,IAAIC,YACA97B,KAAOJ,KAEX,SAASm8B,sBAAsBC,KAG3B,GAAIA,eAAe37B,MAAO,CACtB,MAAM27B,QACH,CAEH,GAAIh8B,KAAK05B,iBAAoB15B,KAAK05B,kBAAoB,IAAM,CACxD73B,IAAI6d,iBAAiB,sBAAuB1f,KAAK05B,iBAGrDuC,iCAAiCj8B,KAAM6B,KAEvC,UAAW7B,KAAK43B,gBAAkB,WAAY,CAC1C,IAAIrjB,QACA1S,IAAOA,IACPuyB,KAAQA,KACRc,IAAO4G,YACP7c,MAASA,MACTid,YAAe,MACftJ,QAAW5yB,MAEfA,KAAK43B,cAAcrjB,QAGvB,GAAIsnB,SAAU,CACVA,aAKZ,GAAIj8B,KAAKu8B,eAAgB,CAErB,MAAM,IAAI97B,MAAMhB,SAASC,KAAK4D,YAAY,aAAc,YAG5D,GAAItD,KAAKg5B,cAAgBv5B,SAASC,KAAK2c,QAAQ4c,gBACnCj5B,KAAK62B,eAAiB72B,KAAK4J,oBAAqB,CACxD,MAAM,IAAInJ,MAAM,qEAIpBy7B,YAAcl8B,KAAKw8B,eAAe9e,KAGlCwe,YAAcl8B,KAAKy8B,cAAcP,aAGjC,GAAIz8B,SAASC,KAAK2c,QAAQqgB,cAAe,CACrCR,YAAcz8B,SAASC,KAAK2c,QAAQsgB,mBAAmBT,aAM3D,GAAIl8B,KAAK62B,cAAe,CACpB72B,KAAK62B,cAAc+F,yBACf36B,IACAuyB,KACA0H,YACA7c,MACA8c,2BAED,CACHn8B,KAAK68B,mBAAmB56B,IAAKuyB,KAAM0H,YAAal8B,KAAKy5B,SAAUxB,UAAW5Y,OAC1E,GAAIrf,KAAK4J,sBAAwBnK,SAASC,KAAK2c,QAAQsc,eAAgB,CACnEmE,6BAA6B76B,IAAK,oBAEtCk6B,sBAAsBl6B,OAM9BjC,KAAK+8B,iBAAmB,SAAUC,QAC9B,IAAIC,YAAcD,OAAOE,WAAa,KAAO,MAE7CpC,mBAAmBmC,cAIvBj9B,KAAKm9B,2BAA6B,WAC9B,IAAIl7B,IAAMjC,KACV,IAAI2B,OACJ,IAAIohB,YAEJsW,aAAap3B,IAAIm7B,iBAEjB,GAAIn7B,IAAIqqB,aAAe,EAAG,CACtB3qB,OAAS,KACTohB,YAAc,KAGd,UAAY9gB,IAAIo7B,eAAkB,WAAY,CAC1C,IACI17B,OAASM,IAAIo7B,aAAap7B,KAE5B,MAAOpD,GACLkkB,YAAclkB,GAItB,UAAYoD,IAAIq7B,wBAA2B,WAAY,CACnD,IAAK37B,OAAQ,CACTA,OAASlC,SAASC,KAAK2c,QAAQkhB,gBAEnCt7B,IAAIq7B,sBAAsBr7B,IAAIu7B,UAAW77B,OAAQohB,YAAa9gB,QAe1EjC,KAAKy9B,YAAc,SAAUne,UAIzBtf,KAAK09B,yBAAyB,KAAMpe,WAWxCtf,KAAK09B,yBAA2B,SAAUz7B,IAAKqd,UAE3Ctf,KAAK29B,yBAAyB39B,KAAMP,SAASC,KAAK2c,QAAQuhB,SAC1D59B,KAAK69B,oBAAoB79B,KAAMP,SAASC,KAAK2c,QAAQuhB,QAAS,KAAM,KAAMte,WAG9Etf,KAAK69B,oBAAsB,SAAUL,UAAW77B,OAAQm8B,OAAQ77B,IAAKqd,UACjEke,UAAU35B,QAAQ,kBAAmB25B,UAAW77B,OAAQm8B,OAAQ77B,IAAKqd,WAYzE,IAAIye,OAAS,KAEb,IAAIC,UAAY,KAChBh+B,KAAKi+B,MAAQ,SAAUtE,WAAYuE,cAAeC,cAAezE,aAC7D,IAAI0E,MACAC,GACAC,QAAU,MACVt7B,QACAsc,SACAif,oBACAC,cAEJT,OAAS,KACTC,UAAY,KAEZ,IAAKhI,iBAAkB,CAMnBh2B,KAAK4J,oBAAsB5J,KAAK4J,oBAAoBnG,cAGxD,GAAIzD,KAAK4J,sBAAwBnK,SAASC,KAAK2c,QAAQwc,cAAe,CAGlE,MAAM,IAAIp4B,MAAMhB,SAASC,KAAK4D,YAAY,aAAc,UAAW,YAGvE,GAAItD,KAAKg5B,cAAgBv5B,SAASC,KAAK2c,QAAQ4c,eAAiBj5B,KAAK62B,cAAe,CAChF,MAAM,IAAIp2B,MAAM,4EAGpB,GAAIW,UAAU+B,OAAS,EAAG,CACtB,GAAI/B,UAAU,WAAaA,UAAU,KAAO,SAAU,CAIlD4B,KAAK,GAAK5B,UAAU,GAAGu4B,WACvB32B,KAAK,GAAK5B,UAAU,GAAGq4B,SACvBz2B,KAAK,GAAK5B,UAAU,GAAGq9B,SACvBz7B,KAAK,GAAK5B,UAAU,GAAGs4B,YACvB12B,KAAK,GAAK5B,UAAU,GAAGie,MAOvBC,SAAWle,UAAU,GAAGke,SAExBif,oBAAsBn9B,UAAU,GAAGm9B,oBACnC,UAAWA,sBAAwB,YAAa,CAC5CA,oBAAsBjI,gCACnB,GAAIiI,4BAA+BA,sBAAwB,SAAW,CACzE,MAAM,IAAI99B,MAAMhB,SAASC,KAAK4D,YAC1B,aACA,UACA,QACA,uDAGL,CACHN,KAAO5B,WAIf,GAAI4B,KAAKG,OAAS,EAAG,CACjB,GAAIH,KAAK,GAAI,CACT,IAAI07B,YAAc17B,KAAK,GAIvB,GAAI07B,YAAYA,YAAYv7B,OAAS,KAAO,IAAK,CAC7Cu7B,YAAcA,YAAYv2B,UAAU,EAAGu2B,YAAYv7B,OAAS,GAEhEu3B,cAAcgE,YAAa1+B,WACxB,IAAKA,KAAK25B,WAAY,CACzBa,eAAe/6B,SAASC,KAAK2c,QAAQsiB,sBAAuB3+B,MAC5D,MAAM,IAAIS,MAAM,uDAGpB,GAAIuC,KAAK,GAAI,CACTo7B,MAAQp7B,KAAK,GAGjB,GAAIA,KAAK,GAAI,CACTq7B,GAAKr7B,KAAK,GAGd,GAAIA,KAAK,GAAI,CACTk4B,eAAel4B,KAAK,GAAIhD,MAG5B,GAAIgD,KAAK,GAAI,CACT,UAAYA,KAAK,KAAQ,UAAW,CAChCs7B,QAAUt7B,KAAK,OACZ,CACH,MAAM,IAAIvC,MAAM,4EAGrB,CACH+5B,eAAe/6B,SAASC,KAAK2c,QAAQsiB,sBAAuB3+B,MAC5D,MAAM,IAAIS,MAAM,uDAKpBu9B,UAAYI,MACZL,OAASM,GAET,GAAIr+B,KAAK4J,sBAAwBnK,SAASC,KAAK2c,QAAQoc,gBAC/Cz4B,KAAK4J,sBAAwBnK,SAASC,KAAK2c,QAAQsc,eAAgB,CAUvEyF,MAAQ,KACRC,GAAK,KAGT,IAAIp8B,IAAM,IAAItD,eACdsD,IAAIu7B,UAAYx9B,KAEhB,IACIw+B,cAAgBx+B,KAAK25B,WAAa35B,KAAK05B,YACvC,GAAIj6B,SAASC,KAAK2c,QAAQqgB,cAAe,CACrC8B,cAAgB/+B,SAASC,KAAK2c,QAAQsgB,mBAAmB6B,eAE7Dx+B,KAAK68B,mBAAmB56B,IAAK,MAAOu8B,cAAeJ,MAAOC,GAAIC,SAE9D7+B,SAASC,KAAK2c,QAAQuiB,mBAAmB38B,KAEzCo6B,iCAAiCr8B,KAAMiC,KACvC,GAAIjC,KAAK4J,sBAAwBnK,SAASC,KAAK2c,QAAQsc,eAAgB,CACnEmE,6BACI76B,IACA,oFAIRA,IAAI48B,SAAWP,QACf,GAAIA,QAAS,CACTr8B,IAAIoe,mBAAqBrgB,KAAKm9B,2BAC9B,GAAIn9B,KAAK4J,sBAAwBnK,SAASC,KAAK2c,QAAQsc,eAAgB,CACnE12B,IAAIo7B,aAAer9B,KAAK8+B,2BACrB,CACH78B,IAAIo7B,aAAer9B,KAAK++B,oBACxB98B,IAAIq7B,sBAAwBt9B,KAAKg/B,eAErC,GAAIh/B,KAAK4J,sBAAwBnK,SAASC,KAAK2c,QAAQuc,iBAC5C3C,gBACAsI,oBAAsB,EAAG,CAChCt8B,IAAIm7B,gBAAkBr8B,WAClB,WACIs4B,aAAap3B,IAAIm7B,iBACjBn7B,IAAIg9B,mBAAqB,KACzBh9B,IAAIi9B,SAERX,qBAGRt8B,IAAIk9B,aAAejM,YACnBjxB,IAAIhC,UAAYqf,SAGpB,UAAWtf,KAAKg4B,gBAAkB,WAAY,CAC1C,IAAIoH,cAAgB,MACpB,GAAIp/B,KAAK4J,sBAAwBnK,SAASC,KAAK2c,QAAQsc,eAAgB,CACnEyG,cAAgB,KAIpB1D,kBAAkBz5B,IAAKjC,MACvB,IAAI2U,QACA1S,IAAOA,IACPuyB,KAAQ,MACRc,IAAOt1B,KAAK25B,WAAa35B,KAAK05B,YAC9Bra,MAAS,MACTid,YAAe8C,cACfpM,QAAWhzB,MAEfA,KAAKg4B,cAAcrjB,QACnB1S,IAAM0S,OAAO1S,IAEjBy5B,kBAAkBz5B,IAAKjC,MACvBiC,IAAI8d,KAAK,MACX,MAAOlhB,GACLw6B,aAAap3B,IAAIm7B,iBACjBzC,mBAAmB14B,IAAI+oB,OAAQhrB,MAC/Bw6B,eAAe/6B,SAASC,KAAK2c,QAAQsiB,sBAAuB3+B,MAC5Dg+B,UAAY,KACZD,OAAS,KACT,MAAMl/B,EAGV,GAAIy/B,QAAS,CACT,OAAO7+B,SAASC,KAAK2c,QAAQgjB,kBAC1B,CACH1E,mBAAmB14B,IAAI+oB,OAAQhrB,MAC/B,GAAIA,KAAK4J,sBAAwBnK,SAASC,KAAK2c,QAAQsc,eAAgB,CACnE,OAAQ34B,KAAK8+B,uBAAuB78B,SACjC,CACH,OAAQjC,KAAK++B,oBAAoB98B,QAM7CjC,KAAK8+B,uBAAyB,SAAU78B,KACpC,IAAIu7B,UAAYv7B,IAAIu7B,UACpB7C,mBAAmB14B,IAAI+oB,OAAQ/oB,IAAIu7B,WAEnC,IAAI8B,iBACAr9B,IAAOA,IACPo8B,GAAMN,OACNK,MAASJ,UACTuB,WAAc/B,WAElB,IACI,OAAOgC,YAAYF,iBACrB,MAAOzgC,GACLk/B,OAAS,KACTC,UAAY,KACZ,MAAMn/B,IAiBd,SAAS2gC,YAAYx8B,MACjB,IAAIf,IAAMe,KAAKf,IACf,IAAIs9B,WAAav8B,KAAKu8B,WACtB,IAAIE,OAGJ,IAAIC,YAAc,KAClB,IAAIC,SAAW,MACf,IAAIhrB,QACAqe,QAAWuM,WACXt9B,IAAOA,IACP29B,eAAkB,MAGtBF,YAAcz9B,IAAI+5B,kBAAkB,gBAEpC,GAAI0D,aAAeA,YAAYrlB,QAAQ,qBAAuB,EAAG,CAC7DwlB,wBAAwBlrB,QACxB,IAAKA,OAAOirB,gBAAmBjrB,OAAOirB,gBAAkB,KAAOjrB,OAAOirB,eAAiB,IAAM,CACzFD,SAAW,SACR,CAGHhF,mBAAmBhmB,OAAOirB,eAAgBL,iBAE3C,CAEH,GAAIA,WAAW1F,kBAAoB,IAAK,CACpC,GAAIiG,cAAc79B,KAAM,CACpB09B,SAAW,OAQvB,GAAIA,SAAU,CAMVF,OAASx9B,IACTA,IAAM,IAAItD,eACVqE,KAAKf,IAAMA,IACX0S,OAAO1S,IAAMA,IAKbA,IAAIu7B,UAAYiC,OAAOjC,UACvBv7B,IAAI48B,SAAWY,OAAOZ,SACtB58B,IAAIhC,UAAYw/B,OAAOx/B,UACvBgC,IAAIk9B,aAAeM,OAAON,aAE1Bl9B,IAAI89B,KAAK,OAAQR,WAAW5F,WAAa,uCAAwC13B,IAAI48B,UACrF58B,IAAI6d,iBAAiB,eAAgB,qCACrC7d,IAAI6d,iBAAiB,gBAAiB,aAEtCuc,iCAAiCkD,WAAYt9B,KAE7C66B,6BAA6B76B,IAAK,oBAElC,IAOI,UAAWs9B,WAAWvH,gBAAkB,WAAY,CAChD,IAAIgI,UACA/9B,IAAOA,IACPuyB,KAAQ,OACRc,IAAOiK,WAAW5F,WAAa,uCAC/Bta,MAASpd,IAAI48B,SACbvC,YAAe,MACftJ,QAAWuM,YAEfA,WAAWvH,cAAcgI,UACzB/9B,IAAM+9B,SAAS/9B,IAGnB,GAAIA,IAAI48B,SAAU,CACd58B,IAAIoe,mBAAqBkf,WAAWpC,2BACpCl7B,IAAIo7B,aAAekC,WAAWU,gBAC9Bh+B,IAAIq7B,sBAAwBiC,WAAWP,eAI3C/8B,IAAI8d,KAAK,cAAgB6U,mBAAmB5xB,KAAKo7B,OACvC,eAAiBxJ,mBAAmB5xB,KAAKq7B,IAAM,kBAC3D,MAAOx/B,GACL27B,eAAe/6B,SAASC,KAAK2c,QAAQsiB,sBAAuBY,YAC5D5E,mBAAmB14B,IAAI+oB,OAAQuU,YAE/BvB,UAAY,KACZD,OAAS,KACT,MAAMl/B,GAId,GAAIoD,IAAI48B,WAAac,SAAU,CAC3B19B,IAAIq7B,sBAAwBiC,WAAWP,eACvC,OAAOO,WAAWU,gBAAgBh+B,KAEtC,IAAKA,IAAI48B,SAAU,CACf,OAAOU,WAAWU,gBAAgBh+B,MAK1CjC,KAAKigC,gBAAkB,SAAUh+B,KAE7B,IAAIs9B,WAAat9B,IAAIu7B,UACrB,IAAI7oB,QACAqe,QAAWuM,WACXt9B,IAAOA,IACP29B,eAAkB,MAEtB,IAAIF,YAAcz9B,IAAI+5B,kBAAkB,gBAExC,GAAI0D,aAAeA,YAAYrlB,QAAQ,qBAAuB,EAAG,CAC7DwlB,wBAAwBlrB,QACxB,IAAKA,OAAOirB,eAAgB,CACxB,MAAM,IAAIn/B,MACN,+EACAwB,IAAI+oB,OAAS,KAIrB2P,mBAAmBhmB,OAAOirB,eAAgBL,gBACvC,CACH,GAAIt9B,IAAI+oB,SAAW,IAAK,CAKpB,GAAIkV,iBAAiBj+B,MAAQ69B,cAAc79B,KAAM,CAC7C04B,mBAAmB,IAAK4E,gBACrB,CACH5E,mBAAmB14B,IAAI+oB,OAAQuU,cAK3C,OAAOA,WAAWR,oBAAoB98B,MAI1CjC,KAAK++B,oBAAsB,SAAU98B,KASjC,IAAIu7B,UAAYv7B,IAAIu7B,UAEpB7C,mBAAmB14B,IAAI+oB,OAAQ/oB,IAAIu7B,WAEnC,GAAIA,UAAU3D,kBAAoB,IAAK,CACnCW,eAAe/6B,SAASC,KAAK2c,QAAQ4c,cAAeuE,WACpD3C,2BAA2B,MAC3BJ,YAAYuD,UAAWR,WACvBvF,UAAY8F,OACZP,UAAUjR,qBAAqBtqB,KAC/Bk4B,sBAEA,IAAIgG,cACAC,QAAS,KACT/gB,MAAO,KACPa,aAAc,KACdmgB,yBAA0B,KAC1BC,eAAgB9C,UAAU+C,6BAE9BJ,aAAaC,QAAU5C,UAAUgD,eACjChD,UAAUiD,UAAUN,kBACjB,CACH,GAAI3C,UAAU3D,kBAAoB,IAAK,CACnCW,eAAe/6B,SAASC,KAAK2c,QAAQqkB,6BAA8BlD,eAChE,CACHhD,eAAe/6B,SAASC,KAAK2c,QAAQsiB,sBAAuBnB,YAGpE9B,kBAAkBz5B,IAAKu7B,WACvBmD,+BAA+BnD,UAAWv7B,KAG1C+7B,UAAY,KACZD,OAAS,KACT,GAAI97B,IAAIg9B,mBAAoB,CACxB,MAAM,IAAIx+B,MAAMhB,SAASC,KAAK4D,YAAY,aAAc,UAK5D,OAAOk6B,UAAUxE,aAIrBh5B,KAAKg/B,eAAiB,SAAUxB,UAAW77B,OAAQm8B,OAAQ77B,KACvDu7B,UAAU35B,QAAQ,aAAc25B,UAAW77B,OAAQm8B,OAAQ77B,MAM/DjC,KAAK4gC,OAAS,SAAU59B,MACpB,IAAIs7B,QAAU,MACVvb,YAAc,KACd9gB,IACAqd,SACA3K,OAEJ,GAAI3U,KAAK4J,sBAAwBnK,SAASC,KAAK2c,QAAQwc,cAAe,CAGlE,MAAM,IAAIp4B,MAAMhB,SAASC,KAAK4D,YAAY,aAAc,UAAW,aAGvE,GAAItD,KAAKg5B,cAAgBv5B,SAASC,KAAK2c,QAAQ4c,eAAiBj5B,KAAK4J,oBAAqB,CACtF,MAAM,IAAInJ,MAAM,6DAGpB,UAAWuC,OAAS,SAAU,CAC1Bs7B,QAAUt7B,KAAKqc,MACf,GAAIif,gBAAmBA,UAAY,UAAY,CAC3C,MAAM,IAAI79B,MAAMhB,SAASC,KAAK4D,YAC1B,aACA,UACA,SACA,oCAORgc,SAAWtc,KAAKsc,SAGpBrd,IAAM,IAAItD,eACVsD,IAAIu7B,UAAYx9B,KAChB,IAIIiC,IAAIk9B,aAAejM,YACnBjxB,IAAIhC,UAAYqf,SAChB,GAAItf,KAAK4J,sBAAwBnK,SAASC,KAAK2c,QAAQsc,gBAC/C34B,KAAK4J,sBAAwBnK,SAASC,KAAK2c,QAAQuc,gBAAiB,CACxE,GAAI0F,QAAS,CACTr8B,IAAIoe,mBAAqBrgB,KAAKm9B,2BAC9Bl7B,IAAIo7B,aAAer9B,KAAK6gC,qBACxB5+B,IAAIq7B,sBAAwBt9B,KAAK8gC,gBAIrC7+B,IAAI89B,KAAK,MAAO//B,KAAK25B,WAAa,wCAAyC2E,SAU3E,IACIr8B,IAAI8+B,gBAAkB,KACxB,MAAOliC,IAIToD,IAAI6d,iBAAiB,SAAU,oBAG/Buc,iCAAiCr8B,KAAMiC,KAEvC,UAAWjC,KAAKg4B,gBAAkB,WAAY,CAC1C0D,kBAAkBz5B,IAAKjC,MACvB2U,QACI1S,IAAOA,IACPuyB,KAAQ,MACRc,IAAOt1B,KAAK25B,WAAa,wCACzBta,MAAS,MACTid,YAAe,MACftJ,QAAWhzB,MAEfA,KAAKg4B,cAAcrjB,QACnB1S,IAAM0S,OAAO1S,IAGjBy5B,kBAAkBz5B,IAAKjC,MACvBiC,IAAI8d,WACD,CACH9d,IAAI++B,mBAAqB,MAE/B,MAAOniC,GACLmB,KAAK29B,yBAAyB39B,KAAM,OACpC,MAAMnB,EAGV,IAAKy/B,QAAS,CACV,IACIt+B,KAAK6gC,qBAAqB5+B,KAC5B,MAAOpD,GACL,MAAMA,GAId,GAAIy/B,SAAWt+B,KAAK4J,sBAAwBnK,SAASC,KAAK2c,QAAQoc,eAAgB,CAE9E,IACIz4B,KAAK6gC,qBAAqB5+B,KAC5B,MAAOpD,GACLkkB,YAAclkB,EAElBmB,KAAK8gC,gBAAgB9gC,KAAM,KAAM+iB,YAAa9gB,OAOtDjC,KAAKihC,WAAa,WACd1H,cAAgB,KAChB2H,wBAGJlhC,KAAK8gC,gBAAkB,SAAUtD,UAAW77B,OAAQohB,YAAa9gB,KAG7Du7B,UAAU35B,QAAQ,cAAe25B,UAAWza,YAAa9gB,MAG7DjC,KAAK6gC,qBAAuB,SAAU5+B,KAClC,IAAIk/B,gBACJ,IAAI3D,UAAYv7B,IAAIu7B,UACpB,IAAI4D,cAAgB,MAEpB,GAAIn/B,IAAI++B,mBAAoB,CACxBG,gBAAkB,UACf,GAAIl/B,IAAI+oB,SAAW,IAAK,CAG3B,GAAIwS,UAAU5zB,sBAAwBnK,SAASC,KAAK2c,QAAQuc,gBAAiB,CAMzE,GAAI32B,IAAI+oB,SAAW,IAAK,CACpBmW,gBAAkB,SACf,CACHA,gBAAkB,MAClB,MAAM,IAAI1gC,MAAM,oCAAsCwB,IAAI+oB,aAE3D,CAEHmW,gBAAkB,MAMlB,MAAM,IAAI1gC,MAAM,oCAAsCwB,IAAI+oB,aAE3D,CACHmW,gBAAkB,KAGtBR,+BAA+BnD,UAAWv7B,KAC1Cu7B,UAAUG,yBAAyBH,UAAW2D,kBAGlDnhC,KAAK29B,yBAA2B,SAAUH,UAAWx7B,SACjDw4B,eAAe,KAAMgD,WACrB7C,mBAAmB,KAAM6C,WACzB5C,mBAAmB,KAAM4C,WACzB/C,YAAY,KAAM+C,WAClBhE,gBAAgB,MAEhBvB,UAAY,KAEZ,GAAIj2B,QAAS,CACT64B,2BAA2B,OAC3BC,mBAAmB,OACnBC,kBAAkBrE,uBAClBgF,kBAAkB,KAAM8B,WACxBnE,aAAaF,cAOrBn5B,KAAKg0B,WAAa,SAAU/yB,KAAMC,KAAMC,KAAMkgC,MAC1C,IAAItO,WACAuO,gBACAC,gBACAjD,QAAU,MACVr8B,IACAqd,SACAif,oBACAiD,aACAC,aACArhC,KAAOJ,KAEX,SAAS0hC,sBAOLjiC,SAASC,KAAK2c,QAAQuiB,mBAAmB38B,KAEzCo6B,iCAAiCj8B,KAAM6B,KAEvC,GAAIq8B,QAAS,CACTr8B,IAAIoe,mBAAqBjgB,KAAK+8B,2BAC9Bl7B,IAAIo7B,aAAej9B,KAAKuhC,yBACxB1/B,IAAIq7B,sBAAwBl9B,KAAKwhC,oBAEjC,GAAIxhC,KAAKwJ,sBAAwBnK,SAASC,KAAK2c,QAAQuc,iBAC5C3C,gBACAsI,oBAAqB,CAC5Bt8B,IAAIm7B,gBAAkBr8B,WAAW,WAC7Bs4B,aAAap3B,IAAIm7B,iBACjBn7B,IAAIg9B,mBAAqB,KACzBh9B,IAAIi9B,SAERX,qBAIJt8B,IAAIk9B,aAAejM,YACnBjxB,IAAIhC,UAAYqf,SAChBrd,IAAI4/B,cAAgBL,aAGxB,IACI,UAAWphC,KAAK43B,gBAAkB,WAAY,CAC1C0D,kBAAkBz5B,IAAK7B,MACvB,IAAIuU,QACA1S,IAAOA,IACPuyB,KAAQ,MACRc,IAAOvC,WACP1T,MAAS,MACTid,YAAe,MACftJ,QAAW5yB,MAEfA,KAAK43B,cAAcrjB,QACnB1S,IAAM0S,OAAO1S,IAGjBy5B,kBAAkBz5B,IAAK7B,MACvB6B,IAAI8d,KAAK,MACX,MAAOlhB,GACL,MAAM,IAAI4B,MAAM,6BAA+BsyB,WAAa,OAASl0B,EAAE6E,SAE3E,GAAI46B,QAAS,CACT,OAAO7+B,SAASC,KAAK2c,QAAQgjB,kBAC1B,CACH,OAAOj/B,KAAKuhC,yBAAyB1/B,MAK7C,GAAIjC,KAAKu8B,eAAgB,CAErB,MAAM,IAAI97B,MAAMhB,SAASC,KAAK4D,YAAY,aAAc,gBAI5DwzB,kBAAoB,KAIpB,GAAI11B,UAAU+B,OAAS,EAAG,CACtB,UAAWlC,OAAS,SAAU,CAE1B,IAAKG,UAAU,GAAG0gC,kBAAmB,CACjC,GAAK9hC,KAAKg5B,cAAgBv5B,SAASC,KAAK2c,QAAQ4c,gBACpCj5B,KAAK62B,eACN72B,KAAK4J,oBAAqB,CACjC,MAAM,IAAInJ,MAAM,kEAIxBsyB,WAAa9xB,KAAK8xB,WAClB,IAAKA,mBAAsBA,aAAe,SAAW,CACjD,MAAM,IAAItyB,MAAMhB,SAASC,KAAK4D,YAC1B,aACA,UACA,aACA,oDAGRg+B,gBAAkBrgC,KAAKw4B,SACvB,GAAI6H,wBAA2BA,kBAAoB,SAAW,CAC1D,MAAM,IAAI7gC,MAAMhB,SAASC,KAAK4D,YAC1B,aACA,UACA,aACA,8CAGRi+B,gBAAkBtgC,KAAKw9B,SACvB,GAAI8C,wBAA2BA,kBAAoB,SAAW,CAC1D,MAAM,IAAI9gC,MAAMhB,SAASC,KAAK4D,YAC1B,aACA,UACA,aACA,8CAGRg7B,QAAUr9B,KAAKoe,MACf,GAAIif,gBAAmBA,UAAY,UAAY,CAC3C,MAAM,IAAI79B,MAAMhB,SAASC,KAAK4D,YAC1B,aACA,UACA,aACA,oCAGRi7B,oBAAsBt9B,KAAKs9B,oBAC3B,UAAWA,sBAAwB,YAAa,CAC5CA,oBAAsBjI,gCACnB,GAAIiI,4BAA+BA,sBAAwB,SAAW,CACzE,MAAM,IAAI99B,MAAMhB,SAASC,KAAK4D,YAC1B,aACA,UACA,aACA,kDAGRm+B,aAAexgC,KAAKwgC,aAMpBniB,SAAWre,KAAKqe,SAChBkiB,aAAevgC,KAAKugC,iBACjB,CACHzO,WAAa9xB,KACb,UAAW8xB,aAAe,SAAU,CAChC,MAAM,IAAItyB,MAAM,wEAEpB6gC,gBAAkBpgC,KAClB,GAAIogC,wBAA2BA,kBAAoB,SAAW,CAC1D,MAAM,IAAI7gC,MAAM,qEAEpB8gC,gBAAkBpgC,KAClB,GAAIogC,wBAA2BA,kBAAoB,SAAW,CAC1D,MAAM,IAAI9gC,MAAM,yEAGrB,CACH,MAAM,IAAIA,MAAM,6EAGpB,IAAKghC,aAAc,CACfA,aAAezhC,KAAK62B,cAGpBC,kBAAoB,MASxB,IAAKwK,gBAAiB,CAClBA,gBAAkBthC,KAAKy5B,SAG3B,IAAK8H,gBAAiB,CAClBA,gBAAkBtJ,UAGtBh2B,IAAM,IAAItD,eACVsD,IAAIu7B,UAAYx9B,KAChBiC,IAAI8/B,YAAchP,WAGlB,GAAItzB,SAASC,KAAK8d,gBAAgB2V,WAAWJ,cAAgB3vB,UAAW,CACpE,GAAIk7B,QAAS,CASTr8B,IAAIk9B,aAAejM,YACnBjxB,IAAIhC,UAAYqf,SAChBrd,IAAI4/B,cAAgBL,aAEpBzgC,WACIf,KAAK4hC,oBACL,GACA5hC,KACAP,SAASC,KAAK2c,QAAQ2lB,uBACtB,KACA//B,KAGJ,OAAOxC,SAASC,KAAK2c,QAAQgjB,cAEjC,OAAO5/B,SAASC,KAAK2c,QAAQ2lB,uBAGjC,GAAIP,aAAc,CACdA,aAAa7E,yBAAyB36B,IAAK,MAAO8wB,WAAYuL,QAASoD,qBAGvE,OAAOjiC,SAASC,KAAK2c,QAAQgjB,kBAC1B,CACHr/B,KAAK68B,mBAAmB56B,IAAK,MAAO8wB,WAAYuO,gBAAiBC,gBAAiBjD,SAIlF,OAAOoD,wBAKf1hC,KAAK2hC,yBAA2B,SAAU1/B,KACtC,IAAIggC,mBAAqBhgC,IAAI+oB,OAC7B,IAAIuU,WAAat9B,IAAIu7B,UACrB,IAAI0E,YACJ,IAAInP,WAAa9wB,IAAI8/B,YACjBI,WACAC,eAAiBlP,YAGrB,IAAK4D,kBAAmB,CACpBuL,kBAAkBpgC,KAGtB,IAAMggC,qBAAuB,KAASA,qBAAuB,IAAOhgC,IAAIqpB,aAAc,CAClF4W,YAAc3C,WAAW+C,cAAcrgC,KACvC,IACIxC,SAASC,KAAK8d,gBAAgBwW,WAAWkO,YAAa3C,YACxD,MAAO1gC,GACL,GAAIY,SAASC,KAAK8d,gBAAgB2V,WAAWJ,cAAgB3vB,UAAW,CAMpE,OAAO3D,SAASC,KAAK2c,QAAQ2lB,uBAGjC,MAAM,IAAIvhC,MAAM,6BAA+BsyB,WAAa,QAAUl0B,EAAE6E,SAG5Ew+B,YAAYh+B,QAAQ,SAAUga,SAC1BikB,WAAa5C,WAAW/C,eAAete,QAAQgW,SAC/CkH,YACI,IAAI37B,SAASC,KAAK01B,qBAEV/wB,KAAM6Z,QAAQ7Z,KACdixB,IAAK6M,aAGb5C,YAGJ,GAAIrhB,QAAQsC,UAAYtC,QAAQsC,SAAS+hB,kBAAoBhD,WAAWiD,aAAc,CAClF1jC,QAAQs4B,KACJ,gEACE,4DAKd+D,gBAAgBpI,WAAYwM,YAC5B9/B,SAASC,KAAK8d,gBAAgBsV,WAAWC,WAAYwM,YACrD,GAAI6C,eAAgB,CAChB3iC,SAASC,KAAK8d,gBAAgByV,eAAeF,WAAYqP,sBAE1D,GAAIH,qBAAuB,IAAK,CACnC,OAAOxiC,SAASC,KAAKoC,uBAAuB2gC,sBAAsBxgC,UAC/D,GAAIA,IAAIg9B,mBAAoB,CAC/B,MAAM,IAAIx+B,MAAMhB,SAASC,KAAK4D,YAAY,aAAc,mBACrD,CACH,MAAM,IAAI7C,MACN,6BAA+BsyB,WAC7B,mBAAqBkP,mBAAqB,KAIpD,OAAOxiC,SAASC,KAAK2c,QAAQuhB,SAGjC59B,KAAK4hC,oBAAsB,SAAUpE,UAAW77B,OAAQm8B,OAAQ77B,KAC5Du7B,UAAU35B,QAAQ,kBAAmB25B,UAAW77B,OAAQm8B,OAAQ77B,MAgCpEjC,KAAK0iC,KAAO,SAAU1/B,MAClB,IAAIk6B,WAAa,MACbyF,UACIvC,QAAS,KACT/gB,MAAO,KACPa,aAAc,KACdmgB,yBAA0B,KAC1BC,eAAgBtgC,KAAK4iC,wBACrBC,cAAe,MAGvB,GAAI7iC,KAAKu8B,eAAgB,CAErB,MAAM,IAAI97B,MAAMhB,SAASC,KAAK4D,YAAY,aAAc,YAG5D,IAAMtD,KAAK62B,eAAmB72B,KAAKg5B,cAAgBv5B,SAASC,KAAK2c,QAAQ4c,cAAgB,CACrF,MAAM,IAAIx4B,MAAM,8CAGpB,GAAIuC,KAAM,CACN,GAAIA,KAAKqc,QAAUjc,UAAW,CAM1Bu/B,SAAStjB,MAAQrc,KAAKqc,MAG1B,GAAIrc,KAAK8/B,iBAAmB1/B,UAAW,CACnCu/B,SAAStC,0BAA4Br9B,KAAK8/B,eAG9C,GAAI9/B,KAAKkd,qBAAwBld,KAAKkd,eAAkB,WAAY,CAChEyiB,SAASziB,aAAeld,KAAKkd,aAMjCyiB,SAASrjB,SAAWtc,KAAKsc,SACzBqjB,SAASzP,YAAclwB,KAAKkwB,YAShCyP,SAASvC,QAAUhgC,KAAKogC,eACxBpgC,KAAKqgC,UAAUkC,UACf,IAAKA,SAAStjB,MAAO,CACjB,GAAIsjB,SAAS1gC,IAAK,CACdi7B,WAAa98B,KAAK2iC,mBAAmBJ,UACrC,GAAI3/B,KAAK6/B,gBAAkBz/B,UAAW,CAClCJ,KAAK6/B,cAAgBF,SAASE,mBAE/B,CACH3F,WAAa,MAGjB,GAAIl6B,KAAKf,MAAQmB,UAAW,CAIxBJ,KAAKf,IAAM0gC,SAAS1gC,KAM5B,OAAOi7B,YAiBXl9B,KAAKgjC,qBAAuB,SAAUC,UAClC,IAAIC,aAAe,MAEnB,GAAID,WAAcjjC,KAAc,UAAG,CAC/BkjC,aAAe,UACZ,IAAKD,UAAajjC,KAAc,UAAG,CACtCkjC,aAAe,KAGnB,OAAOA,cAkBXljC,KAAKigB,sBAAwB,SAAUhe,IAAKD,QAASE,SACjD,IAAI2gC,cAAgB,KAChBM,UAAYnjC,KAAKojC,UACrBzC,+BAA+B3gC,KAAMiC,KAOrC,IAAKjC,KAAKwD,QAAS,CACf,OAEJ,IAAI6/B,iBAAmBrjC,KAAKwD,QAAQ8/B,YACpC,IAAIC,gBAAkBvjC,KAAKwD,QAAQggC,WACnC,GAAKH,iBAAiBlgC,SAAW,GAAOogC,gBAAgBpgC,SAAW,EAAI,CACnE,OAYJ,GAAInB,QAAS,CACT64B,2BAA2B,MAC3BpD,kBAAkB,UACf,CAQH,GAAIlB,eAAgB,CAKhB,IAAIkN,eACAX,eAAgB,KAChBD,cAAe,KACfxjB,MAAO,OAEX,IAAMjf,KAAKsiC,KAAKe,eAAiB,CAC7BZ,cAAgBY,cAAcZ,cAC9BhI,2BAA2B,WACxB,CAGHA,2BAA2B,QAOvC,GAAIsI,YAAcnjC,KAAKojC,UAAW,CAC9BpjC,KAAK6D,QAAQ,UAAW7D,KAAM6iC,cAAe3gC,cAC1C,IAAKihC,WAAanjC,KAAKojC,UAAW,CACrCpjC,KAAK6D,QAAQ,SAAU7D,KAAMkC,WAgCrClC,KAAK+iC,mBAAqB,SAAU//B,MAChC,IAAIf,IAAMe,KAAKf,IACXyhC,iBACAC,gBAAkB,KAClBR,UAAYnjC,KAAKojC,UACjBQ,wBACAC,mBAEJ,GAAI7gC,KAAK4kB,eAAe,qBAAsB,CAC1Cic,mBAAqB7gC,KAAK8gC,sBACvB,CACHD,mBAAqBpN,gBAMzB,GAAIx0B,IAAI+oB,QAAU,KAAO/oB,IAAI+oB,OAAS,IAAK,CACvC2V,+BAA+B3gC,KAAMiC,KACrC,GAAI4hC,mBAAoB,CACpB,IACIH,iBAAmBl/B,KAAKK,MAAM5C,IAAIqpB,cAClCqY,gBAAkBD,iBAAiBK,gBACrC,MAAOllC,GAOLC,QAAQC,MAAM,mCAGtBsjC,kBAAkBpgC,SACf,CACH,GAAIs0B,eAAgB,CAChB,GAAIt0B,IAAI+oB,SAAW,EAAG,CAClBhoB,KAAK6/B,cAAgBpjC,SAASC,KAAK2c,QAAQ2nB,eAC3CnJ,2BAA2B,YACxB,GAAK54B,IAAI+oB,SAAW,KAAS/oB,IAAI+oB,SAAW,IAAM,CAMrDhoB,KAAK6/B,cAAgBpjC,SAASC,KAAK2c,QAAQ4nB,wBAC3CpJ,2BAA2B,WACxB,CASHA,2BAA2B,WAE5B,CACH73B,KAAK6/B,cAAgBpjC,SAASC,KAAK2c,QAAQsb,gBAOnD,GAAIgM,gBAAiB,CACjB,GAAIA,gBAAgBO,aAAe,QAAS,CACxClhC,KAAK6/B,cAAgBpjC,SAASC,KAAK2c,QAAQ8nB,kBAC3CtJ,2BAA2B,WACxB,CACHA,2BAA2B,OAgBnC+I,wBAA0B5jC,KAAKojC,UAE/B,UAAYnhC,IAAIie,eAAkB,WAAY,CAC1Cje,IAAIie,cACAgd,WAAYl9B,KAAKojC,UACjBnhC,IAAKA,IACL4gC,cAAe7/B,KAAK6/B,gBAK5B,GAAI7/B,KAAKq9B,yBAA0B,CAC/B,GAAI8C,YAAcS,wBAAyB,CACvCxjC,KAAKyD,QAAQ,UAAWzD,KAAM4C,KAAK6/B,cAAe,WAC/C,IAAKM,WAAaS,wBAAyB,CAC9CxjC,KAAKyD,QAAQ,SAAUzD,KAAM,OAIrC,OAAOJ,KAAKojC,WAIhBpjC,KAAK4iC,wBAA0B,WAC3B,IAAI3gC,IAAMjC,KACV,IAAIgD,KAEJ,GAAIf,IAAIqqB,aAAe,EAAG,CACtBtpB,MACIf,IAAKA,IACLo+B,yBAA0B,KAC1BwC,cAAe,MAEnBziC,KAAK2iC,mBAAmB//B,MACxB,GAAIk2B,cAAgB,EAAG,CACnBC,WAAap4B,WAAWX,KAAKg5B,UAAWF,kBAKpDl5B,KAAKugC,4BAA8B,WAC/B,IAAIt+B,IAAMjC,KAEV,GAAIiC,IAAIqqB,aAAe,EAAG,CACtB,IAAI2Q,YAAc,MAClB,GAAIh7B,IAAI+oB,QAAU,KAAO/oB,IAAI+oB,OAAS,IAAK,CACvCiS,YAAc,SACX,CACHlC,kBAAkB36B,KAAKs5B,aACvB56B,QAAQs4B,KAAK,oEAEjB0D,mBAAmBmC,aAInB,GAAI/D,cAAgB,EAAG,CACnBC,WAAap4B,WAAWX,KAAKg5B,UAAWF,kBAYpDl5B,KAAKygC,UAAY,SAAUz9B,MACvB,IAAIf,IAAM,IAAItD,eACVyB,KAAOJ,KAEX,SAASokC,oBACL,GAAIphC,KAAKqc,MAAO,CACZpd,IAAIoe,mBAAqBrd,KAAKs9B,eAC9Br+B,IAAIie,aAAeld,KAAKkd,aACxBje,IAAIk9B,aAAejM,YACnBjxB,IAAIhC,UAAY+C,KAAKsc,SAEzB7f,SAASC,KAAK2c,QAAQuiB,mBAAmB38B,KAEzCo6B,iCAAiCj8B,KAAM6B,KACvC,GAAI7B,KAAKwJ,sBAAwBnK,SAASC,KAAK2c,QAAQsc,eAAgB,CACnEmE,6BACI76B,IACA,oFAGRA,IAAI8d,KAAK,MAGb,IACI,GAAI/f,KAAK62B,cAAe,CACpB72B,KAAK62B,cAAc+F,yBACf36B,IACA,MACAe,KAAKo9B,QACLp9B,KAAKqc,MACL+kB,uBAED,CAGHpkC,KAAK68B,mBAAmB56B,IAAK,MAAOe,KAAKo9B,QAASpgC,KAAKy5B,SAAUxB,UAAWj1B,KAAKqc,OAGjF,GAAIpd,IAAIqqB,aAAe,EAAG,CACtB8X,sBAGV,MAAOvlC,GACLmE,KAAKjE,MAAQF,EAGjBmE,KAAKf,IAAMA,KAGfjC,KAAKwgC,aAAe,WAChB,IAAIJ,QAAUpgC,KAAK25B,WAAahD,eAEhC,GAAIl3B,SAASC,KAAK2c,QAAQqgB,cAAe,CACrC0D,QAAU3gC,SAASC,KAAK2c,QAAQsgB,mBAAmByD,SAEvD,OAAOA,SAOXpgC,KAAKo5B,UAAY,WACbh5B,KAAKsiC,MAAMrjB,MAAO,QAYtBrf,KAAK68B,mBAAqB,SAAU56B,IAAKuyB,KAAMc,IAAKmE,SAAUgF,SAAUpf,OAKpE,GACIoa,UACGz5B,KAAK4J,sBAAwBnK,SAASC,KAAK2c,QAAQuc,gBACxD,CAKE,GAAIrB,2BAA4B,CAC5Bt1B,IAAI89B,KAAKvL,KAAMc,IAAKjW,MAAOoa,SAAUgF,cAClC,CACHx8B,IAAI89B,KAAKvL,KAAMc,IAAKjW,OAIxB,IAAIglB,KAAOC,iBAAiB7K,SAAUgF,UACtCx8B,IAAI6d,iBAAiB,gBAAiBukB,UACnC,CACHpiC,IAAI89B,KAAKvL,KAAMc,IAAKjW,SAQ5Brf,KAAKy8B,cAAgB,SAAU/e,KAC3B,IAAI6mB,SACAC,SACAC,cACA18B,MAEJ,GAAI/H,KAAK85B,iBAAoB95B,KAAK85B,kBAAoB,IAAM,CAIxD,GAAIpc,IAAIvV,UAAU,EAAGnI,KAAK25B,WAAWx2B,UAAYnD,KAAK25B,WAAY,CAC9D8K,cAAgB,IAAM,cAAgBzkC,KAAK85B,gBAC3C/xB,MAAQ2V,IAAIrD,QAAQ,KACpB,GAAItS,SAAW,EAAG,CACd2V,KAAO+mB,kBACJ,CAEHF,SAAW7mB,IAAIvV,UAAU,EAAGJ,OAC5By8B,SAAW9mB,IAAIvV,UAAUJ,OACzB2V,IAAM6mB,SAAWE,cAAgBD,WAI7C,OAAO9mB,KAUX1d,KAAKusB,qBAAuB,SAAUtqB,KAKlCs5B,0BAA0Bt5B,IAAKjC,OAGnCA,KAAKsiC,cAAgB,SAAUrgC,KAC3B,IAAIsQ,WACJ,IAAImyB,YAEJ,IACInyB,WAAa/N,KAAKK,MAAM5C,IAAIqpB,cAC5BoZ,YAAcnyB,WAAWihB,SAC3B,MAAO30B,GACLC,QAAQC,MAAM,mEACd2lC,YAAc,KAGlB,OAAOA,aAWX1kC,KAAKw8B,eAAiB,SAAUmI,QAC5B,IAAKA,OAAQ,CAMT,OAAO3kC,KAAK25B,WAEhB,IAAIiL,OAASD,OACb,IAAIE,IAAM,gBACV,IAAKA,IAAIC,KAAKF,QAAS,CACnB,GAAIA,OAAOvqB,QAAQ,OAAS,EAAG,CAC3BuqB,OAAS,IAAMA,OAGnBA,OAAS5kC,KAAK25B,WAAaiL,OAE/B,OAAOA,QAiBX,SAAS9H,6BAA6B76B,IAAK8iC,cACvC,IACI9iC,IAAI8+B,gBAAkB,KACtB9+B,IAAI6d,iBAAiB,SAAUilB,cACjC,MAAOlmC,KAQb,SAASylC,iBAAiBU,KAAM3G,IAC5B,IAAI4G,IAAMD,KAAO,IAAM3G,GACvB,IAAI6G,KAAO9lC,KAAK6lC,KAChB,MAAO,SAAWC,KAoBtB,IAAIC,kBAAoB,0BAExB,SAASrF,cAAc79B,KAEnB,OAAOmjC,0BAA0BnjC,IAAKkjC,mBAK1C,IAAIE,iCAAmC,eAEvC,SAASnF,iBAAiBj+B,KACtB,OAAOmjC,0BAA0BnjC,IAAKojC,kCAI1C,SAASD,0BAA0BnjC,IAAKqjC,cACpC,IAAKrjC,IAAIqpB,aAAc,CACnB,OAAO,MAEX,IAAIoU,YAAcz9B,IAAI+5B,kBAAkB,gBAExC,GAAI0D,aACCA,YAAYrlB,QAAQ,cAAgB,GACpCpY,IAAIqpB,aAAajR,QAAQirB,eAAiB,EAC7C,CACE,OAAO,KAGX,OAAO,MASX,SAASzF,wBAAwBlrB,QAI7B,IAAIpC,WACJoC,OAAOirB,eAAiB,KACxB,IACIrtB,WAAa/N,KAAKK,MAAM8P,OAAO1S,IAAIqpB,cAEnC,GACI/Y,WAAWgzB,cAAgBniC,WACxBmP,WAAWizB,aAAepiC,UAC/B,CACEuR,OAAOirB,eAAiBrtB,WAAWgzB,aAEzC,MAAO1mC,GAEL27B,eAAe/6B,SAASC,KAAK2c,QAAQsiB,sBAAuBhqB,OAAOqe,SACnE2H,mBAAmBhmB,OAAO1S,IAAI+oB,OAAQrW,OAAOqe,SAC7C,MAAM,IAAIvyB,MAAM,gDAKxB,SAAS47B,iCAAiCrJ,QAAS/wB,KAC/C,GAAI+wB,QAAQwP,aAAc,CACtBvgC,IAAI6d,iBAAiB,iBAAkBkT,QAAQwP,mBAC5C,GAAIxP,QAAQsG,mBAAmBmM,gBAAkBriC,UAAW,CAC/DnB,IAAI6d,iBAAiB,iBAAkBkT,QAAQsG,mBAAmBmM,gBAI1E,SAASpD,kBAAkBpgC,KACvB,IAAIu7B,UAAYp9B,KAEhBu6B,mBAAmB14B,IAAI+oB,OAAQwS,WAE/B,GAAIA,UAAU3D,iBAAmB,KAAO2D,UAAU3D,gBAAkB,IAAK,CACrEW,eAAe/6B,SAASC,KAAK2c,QAAQ4c,cAAeuE,WACpD3C,2BAA2B,MAC3B2C,UAAUjR,qBAAqBtqB,KAC/Bk4B,0BACG,CAGH,GACIqD,UAAU3D,kBAAoB,GAC3B2D,UAAU3D,kBAAoB,KAC9B2D,UAAU3D,kBAAoB,IACnC,CACEgB,2BAA2B,OAC3BL,eACI/6B,SAASC,KAAKoC,uBAAuB2gC,sBAAsBxgC,KAC3Du7B,eAED,CAGH3C,2BAA2B,MAC3BL,eAAe/6B,SAASC,KAAK2c,QAAQsiB,sBAAuBnB,YAIpE9B,kBAAkBz5B,IAAKu7B,WACvBmD,+BAA+BnD,UAAWv7B,KAE1C,OAAOu7B,UAAUxE,YAGrB,SAAS2H,+BAA+B3N,QAAS/wB,KAI7C,IAAIwzB,cACAI,QAEJ,GAAI5zB,IAAK,CACLwzB,cAAgB+F,yBAAyBv5B,IAAK,kBAC9C,GAAIwzB,cAAe,CACf,IACII,QAAUrxB,KAAKK,MAAM4wB,eACvB,MAAO52B,IAGT,UAAWg3B,UAAY,SAAU,CAC7B7C,QAAQsG,mBAAmB1D,WAAWC,aACnC,CAEH,MAAM,IAAIp1B,MAAMhB,SAASC,KAAK4D,YAAY,aAAc,UAAW,yBAEpE,GAAImyB,gBAAkB,GAAI,CAE7BzC,QAAQsG,mBAAmB1D,iBAOvC,SAASsL,uBACLzhC,SAASC,KAAK8d,gBAAgB4V,aAAahzB,MAS/C,UAAWsuB,UAAY,SAAU,CAE7BwE,YAAcxE,QAAQwE,YACtB+D,OAASvI,QAAQiL,WACjBH,gBAAgB9K,QAAQ+S,cAExB,GAAI/S,QAAQ+S,cAAgB/S,QAAQ+S,aAAaiE,uBAAwB,CACrErN,aAAe54B,SAASC,KAAK2c,QAAQ4c,cAKzC,GAAIhC,QAAUA,OAAOA,OAAO9zB,OAAS,KAAO,IAAK,CAC7C8zB,OAASA,OAAO9uB,UAAU,EAAG8uB,OAAO9zB,OAAS,GAGjDyzB,YAAclI,QAAQkI,YACtB,GAAIA,YAAa,CACb,GAAIqD,oBAAoBrD,aAAc,CAClCG,gBAAkBkD,oBAAoB,uBACtCjD,UAAYiD,oBAAoB,cAEhC,GACKlD,kBAAoBrI,QAAQ9kB,qBAC5BotB,YAAcC,OACjB,CACEoD,0BACG,CAKHC,0BAA0B1D,aAC1BM,wBAA0B,MASlC,GAAIxI,QAAQ9kB,sBAAwBnK,SAASC,KAAK2c,QAAQuc,gBAAiB,CACvEhC,YAAcxzB,WAMtB,IAAK8zB,wBAAyB,CAC1B,GAAID,OAAQ,CACRyD,cAAczD,OAAQj3B,MAE1B,GAAI0uB,QAAQ9kB,oBAAqB,CAC7B5J,KAAK4J,oBAAsB8kB,QAAQ9kB,wBAMnDnK,SAASC,KAAK2c,QAAQqgB,cAAgB,KAEtC,IAAIiJ,cAAgB,gBAEpB,IAAIC,OAASD,cAEb,IAAIE,WAAa,EACjB,IAAIC,WAAa,EAGjBrmC,SAASC,KAAK2c,QAAQ0pB,kBAAoB,WACtC,IAAIC,IAEJJ,QAAU,EACVI,IAAMJ,OAEN,GAAII,KAAOL,cAAe,CACtBC,OAAS,EACTI,IAAM,EACN,IAAIjnB,EAAIknB,KAAKC,OAAOh8B,KAAKC,IAAMD,KAAKC,OAAS,IAAID,MAAOX,WAAc,KACtE,GAAIs8B,aAAe9mB,EAAG,CAClB+mB,YAAc,EACd,GAAIA,YAAcH,cAAe,CAC7BG,WAAa,OAEd,CACHD,WAAa9mB,EACbknB,KAAKE,SACLL,WAAaG,KAAKG,MAAMH,KAAKE,SAAW,OAIhD,OAAON,WAAa,IAAMC,WAAa,IAAME,KAQjDvmC,SAASC,KAAK2c,QAAQsgB,mBAAqB,SAAUjf,KACjD,IAAI2oB,UAAY,OAAS5mC,SAASC,KAAK2c,QAAQ0pB,oBAC/CroB,MAASA,IAAIrD,QAAQ,QAAU,EAAK,IAAM,KAAOgsB,UACjD,OAAO3oB,KAMXje,SAASC,KAAK2c,QAAQuiB,mBAAqB,SAAU38B,KACjDA,IAAI6d,iBAAiB,gBAAiB,YACtC7d,IAAI6d,iBAAiB,SAAU,aAMnC,UAAYpY,OAAOmS,iBAAoB,WAAY,CAC/CnS,OAAOmS,eACHpa,SAASC,KAAK2c,QACd,iCAEI5W,MAAO,EACPwU,WAAY,OAGpBvS,OAAOmS,eACHpa,SAASC,KAAK2c,QACd,iBAEI5W,MAAO,EACPwU,WAAY,OAGpBvS,OAAOmS,eACHpa,SAASC,KAAK2c,QACd,gCAEI5W,MAAO,EACPwU,WAAY,OAGpBvS,OAAOmS,eACHpa,SAASC,KAAK2c,QACd,yBAEI5W,MAAO,EACPwU,WAAY,OAGpBvS,OAAOmS,eACHpa,SAASC,KAAK2c,QACd,0BAEI5W,MAAO,EACPwU,WAAY,OAGpBvS,OAAOmS,eACHpa,SAASC,KAAK2c,QACd,iBAEI5W,MAAO,EACPwU,WAAY,OAGpBvS,OAAOmS,eACHpa,SAASC,KAAK2c,QACd,iBAEI5W,MAAO,EACPwU,WAAY,OAIpBvS,OAAOmS,eACHpa,SAASC,KAAK2c,QACd,WAEI5W,MAAO,EACPwU,WAAY,OAGpBvS,OAAOmS,eACHpa,SAASC,KAAK2c,QACd,0BAEI5W,MAAO,EACPwU,WAAY,OAGpBvS,OAAOmS,eACHpa,SAASC,KAAK2c,QACd,mBAEI5W,MAAO,EACPwU,WAAY,OAIpBvS,OAAOmS,eACHpa,SAASC,KAAK2c,QACd,kBAEI5W,MAAO,YACPwU,WAAY,OAGpBvS,OAAOmS,eACHpa,SAASC,KAAK2c,QACd,mBAEI5W,MAAO,QACPwU,WAAY,OAGpBvS,OAAOmS,eACHpa,SAASC,KAAK2c,QACd,kBAEI5W,MAAO,OACPwU,WAAY,OAGpBvS,OAAOmS,eACHpa,SAASC,KAAK2c,QACd,iBAEI5W,MAAO,MACPwU,WAAY,OAGpBvS,OAAOmS,eACHpa,SAASC,KAAK2c,QACd,sBAEI5W,MAAO,WACPwU,WAAY,OAIpBvS,OAAOmS,eACHpa,SAASC,KAAK2c,QACd,kBAEI5W,MAAO,oBACPwU,WAAY,OAGpBvS,OAAOmS,eACHpa,SAASC,KAAK2c,QACd,kBAEI5W,MAAO,wBACPwU,WAAY,OAGpBvS,OAAOmS,eACHpa,SAASC,KAAK2c,QACd,2BAEI5W,MAAO,0CACPwU,WAAY,OAGpBvS,OAAOmS,eACHpa,SAASC,KAAK2c,QACd,mBAEI5W,MAAO,oCACPwU,WAAY,OAGpBvS,OAAOmS,eACHpa,SAASC,KAAK2c,QACd,qBAEI5W,MAAO,6BACPwU,WAAY,WAGjB,CACHxa,SAASC,KAAK2c,QAAQ4c,cAAgB,EACtCx5B,SAASC,KAAK2c,QAAQqkB,6BAA+B,EACrDjhC,SAASC,KAAK2c,QAAQsiB,sBAAwB,EAC9Cl/B,SAASC,KAAK2c,QAAQ2lB,uBAAyB,EAE/CviC,SAASC,KAAK2c,QAAQuhB,QAAU,EAChCn+B,SAASC,KAAK2c,QAAQiqB,uBAAyB,EAC/C7mC,SAASC,KAAK2c,QAAQkhB,gBAAkB,EAExC99B,SAASC,KAAK2c,QAAQoc,eAAiB,YACvCh5B,SAASC,KAAK2c,QAAQuc,gBAAkB,QACxCn5B,SAASC,KAAK2c,QAAQsc,eAAiB,OACvCl5B,SAASC,KAAK2c,QAAQwc,cAAgB,MAS1Cp5B,SAASC,KAAK2c,QAAQnc,UAAY,IAAIT,SAASE,KAAK4C,WACpD9C,SAASC,KAAK2c,QAAQnc,UAAU+tB,YAAcxuB,SAASC,KAAK2c,QAC5D,SAASkqB,yBAAyBvjC,KAAMC,IAAKC,cACzCA,aAAaN,UAAYQ,UACzB,IAAIwY,MAAQ,MAGZ5b,KAAKwmC,YAAYtiC,QAAQ,SAAUoZ,WAC/B,GAAIra,MAAQqa,UAAU7Z,cAAe,CACjCmY,MAAQ,QAIhB,IAAKA,MAAO,CACR,MAAM,IAAInb,MAAMhB,SAASC,KAAK4D,YAAY,aAAcL,MAG5D,GAAID,KAAKG,OAAS,EAAG,CACjB,MAAM,IAAI1C,MAAMhB,SAASC,KAAK4D,YAAY,aAAc,IAG5D,UAAWN,KAAK,KAAO,SAAU,CAC7B,MAAM,IAAIvC,MAAMhB,SAASC,KAAK4D,YAAY,eAG9C,UAAWN,KAAK,KAAO,WAAY,CAC/B,MAAM,IAAIvC,MAAMhB,SAASC,KAAK4D,YAAY,eAG9CJ,aAAaR,GAAKM,KAAK,GAEvB,GAAIA,KAAKG,OAAS,EAAG,CACjB,UAAWH,KAAK,KAAO,SAAU,CAC7B,MAAM,IAAIvC,MAAMhB,SAASC,KAAK4D,YAAY,aAAcL,UACrD,CACHC,aAAaP,MAAQK,KAAK,KAKtCvD,SAASC,KAAK2c,QAAQnc,UAAUsmC,aAC3B,UAAW,SAAU,aAAc,kBAAmB,cAAe,mBAE1E/mC,SAASC,KAAK2c,QAAQnc,UAAU6C,kBAAoBwjC,yBACpD9mC,SAASC,KAAK2c,QAAQnc,UAAUqD,SAAW,SAAU2qB,OACjD,MAAO,yBAaXzuB,SAASC,KAAKmC,YAAc,SAASA,YAAY6sB,SAC7C,IAAI+X,WACArO,YACAh4B,KAAOJ,KACP2G,MAKJe,OAAOmS,eACH7Z,KACA,uBAEI+Z,IAAK,WACD,OAAO0sB,WAAaA,WAAW78B,oBAAsBxG,WAEzD6W,WAAY,OAIpBvS,OAAOmS,eACH7Z,KACA,gBAEI+Z,IAAK,WACD,OAAO0sB,WAAaA,WAAW5P,cAAgB,MAEnD5c,WAAY,OAGpBvS,OAAOmS,eACH7Z,KACA,eAEI+Z,IAAK,WACD,OAAO0sB,WAAaA,WAAW7M,YAAcx2B,WAEjD6W,WAAY,OAIpBvS,OAAOmS,eACH7Z,KACA,mBAEI+Z,IAAK,WACD,OAAO0sB,WAAaA,WAAW3M,gBAAkB12B,WAErD6W,WAAY,OAIpBvS,OAAOmS,eACH7Z,KACA,aAEI+Z,IAAK,WACD,OAAO0sB,WAAaA,WAAWrD,UAAYhgC,WAE/C6W,WAAY,OAIpBvS,OAAOmS,eACH7Z,KACA,SAEI+Z,IAAK,WACD,OAAO0sB,WAAaA,WAAWC,MAAQtjC,WAE3C6W,WAAY,OAIpBvS,OAAOmS,eACH7Z,KACA,eAEI+Z,IAAK,WACD,OAAO0sB,WAAaA,WAAWzN,YAAc51B,WAEjD6W,WAAY,OAIpBvS,OAAOmS,eACH7Z,KACA,mBAEI+Z,IAAK,WACD,OAAO0sB,WAAaA,WAAW5M,gBAAkBz2B,WAErD6W,WAAY,OAIpBvS,OAAOmS,eACH7Z,KACA,iBAEI+Z,IAAK,WACD,OAAO0sB,WAAaA,WAAWzO,cAAgB50B,WAEnD4W,IAAK,SAAU0e,QACX,GAAI+N,WAAY,CACZA,WAAWzO,cAAgBU,SAGnCze,WAAY,OAIpBvS,OAAOmS,eACH7Z,KACA,gBAEI+Z,IAAK,WACD,OAAO0sB,WAAaA,WAAWrM,aAAeh3B,WAElD4W,IAAK,SAAU0e,QACX,GAAI+N,WAAY,CACZA,WAAWrM,aAAe1B,SAGlCze,WAAY,OAIpBvS,OAAOmS,eACH7Z,KACA,YAEI+Z,IAAK,WACD,OAAO0sB,WAAaA,WAAWjT,SAAWpwB,WAE9C6W,WAAY,OAIpBvS,OAAOmS,eACH7Z,KACA,cAEI+Z,IAAK,WACD,GAAI0sB,YAAcA,WAAW9M,WAAY,CACrC,OAAO8M,WAAW9M,eACf,CACH,OAAOvB,cAGfne,WAAY,OAIpBvS,OAAOmS,eACH7Z,KACA,YAEI+Z,IAAK,WACD,OAAO0sB,WAAaA,WAAWhN,SAAWr2B,WAE9C6W,WAAY,OAIpBvS,OAAOmS,eACH7Z,KACA,QAEI+Z,IAAK,WACD,OAAOpT,OAEXsT,WAAY,OAIpBvS,OAAOmS,eACH7Z,KACA,kBAEI+Z,IAAK,WACD,OAAO0sB,WAAWlK,gBAEtBtiB,WAAY,QAUpB,SAAS0sB,cAAcxmC,QAASymC,QAASjlC,OAAQC,MAC7C,GAAIglC,QAAS,CACTzmC,QAAQQ,QAAQP,KAAMuB,OAAQC,UAC3B,CACHzB,QAAQS,OAAOR,KAAMuB,OAAQC,OAKrC,SAASilC,2BAA2BrJ,UAAW77B,OAAQohB,YAAa9gB,IAAKqd,UACrE,IAAIwnB,WAEJ,GAAI7kC,IAAK,CACL6kC,WAAa7kC,IAAIhC,cACd,CACH6mC,WAAaxnB,SAGjBqnB,cACIG,WACAnlC,SAAWlC,SAASC,KAAK2c,QAAQuhB,QAAU,KAAO,MAClDj8B,QAEIohB,YAAaA,YACb9gB,IAAKA,MAKjB,SAAS8kC,kBAAkBvJ,UAAW77B,OAAQohB,YAAa9gB,KACvD,IAAIqd,SACAsnB,QAAU,MACVI,aACAplC,KAEJ,GAAID,SAAWlC,SAASC,KAAK2c,QAAQ4qB,cAAe,CAChDD,aAAevnC,SAASC,KAAK2c,QAAQ4qB,mBAClC,GAAItlC,SAAWlC,SAASC,KAAK2c,QAAQqkB,6BAA8B,CACtEsG,aAAevnC,SAASC,KAAK2c,QAAQqkB,iCAClC,CACHsG,aAAevnC,SAASC,KAAK2c,QAAQkhB,gBAGzC,GAAIt7B,KAAOA,IAAIhC,UAAW,CACtBqf,SAAWrd,IAAIhC,UAGf,GACI0B,SAAWlC,SAASC,KAAK2c,QAAQuhB,SACjCj8B,SAAWlC,SAASC,KAAK2c,QAAQ2lB,uBACnC,CAEErgC,OAASA,QAAUlC,SAASC,KAAK2c,QAAQkhB,gBAUzCje,SAAS4nB,sBAAwBznC,SAASC,KAAK2c,QAAQkhB,gBAG3Dje,SAAS6nB,SAASllC,IAAI4/B,gBAClB9O,WAAY9wB,IAAI8/B,YAChBpgC,OAAQA,OACRohB,YAAaA,YACb9gB,IAAKA,KAETqd,SAAS8nB,uBAAyB,EAClC,GAAI9nB,SAAS8nB,wBAA0B9nB,SAAS+nB,aAAc,CAC1D/nB,SAASgoB,kBAAoB,KAE7B,IAAKhoB,SAAS4nB,sBAAuB,CACjCN,QAAU,KACVI,aAAevnC,SAASC,KAAK2c,QAAQuhB,QAEzC,GAAIoJ,eAAiBvnC,SAASC,KAAK2c,QAAQuhB,QAAS,CAChD,GAAI37B,IAAIhC,UAAUknC,SAAShkC,SAAW,EAAG,CACrCvB,KAAOK,IAAIhC,UAAUknC,SAAS,OAC3B,CACHvlC,MACIK,IAAKA,IACLN,OAAQqlC,aACRO,QAAStlC,IAAIhC,UAAUknC,eAG5B,CACH,GAAIllC,IAAIhC,UAAUknC,SAAShkC,SAAW,EAAG,CACrCvB,KAAOK,IAAIhC,UAAUknC,SAAS,OAC3B,CACHvlC,MACIK,IAAKA,IACLN,OAAQqlC,aACRjkB,YAAa,IAAItiB,MAAMhB,SAASC,KAAK4D,YAAY,eACjDikC,QAAStlC,IAAIhC,UAAUknC,WAInCR,cACI1kC,IAAIhC,UACJ2mC,QACAI,aACAplC,QAMhB,SAAS4lC,cAAchK,UAAWza,YAAa9gB,KAC3C,IAAIN,OAASlC,SAASC,KAAK2c,QAAQkhB,gBAC/BqJ,QAAU,MACd,GAAI3kC,KAAOA,IAAIhC,UAAW,CAItB,IAAK8iB,cAAgBya,UAAUxE,YAAa,CACxCr3B,OAASlC,SAASC,KAAK2c,QAAQuhB,QAC/BgJ,QAAU,KAEdD,cACI1kC,IAAIhC,UACJ2mC,QACAjlC,QAEIohB,YAAaA,YACb9gB,IAAKA,OAMrB,SAASwlC,eAAezkC,MACpB,IAAIf,IAAMe,KAAKf,IACf,GAAIA,KAAOA,IAAIhC,UAAW,CACtB0mC,cACI1kC,IAAIhC,UACJ+C,KAAKk6B,WACLl6B,KAAKk6B,YAED2F,cAAe7/B,KAAK6/B,cACpB5gC,IAAKA,OAYrBjC,KAAKi+B,MAAQ,SAAUyJ,SAAUjJ,SAAU/P,SACvC,IAAIpP,SAAW,IAAI7f,SAASE,KAAKI,SAC7Bw+B,oBAEJ,SAASoJ,mBACLvnC,KAAKwnC,eACAC,KAAK,SAAUxmC,OAAQM,OAAQC,MAC5BP,OAAS5B,SAASE,KAAKI,SAASuC,eAAejB,OAAQM,OAAQC,MAC/D0d,SAAS3e,QAAQP,KAAMiB,OAAOM,OAAQN,OAAOO,OAC9C,SAAUP,OAAQM,OAAQC,MACzBP,OAAS5B,SAASE,KAAKI,SAASuC,eAAejB,OAAQM,OAAQC,MAC/D0d,SAAS1e,OAAOR,KAAMiB,OAAOM,OAAQN,OAAOO,QAIxD,IAMI,GAAI5B,KAAKu8B,eAAgB,CAErB,MAAM,IAAI97B,MAAMhB,SAASC,KAAK4D,YAAY,aAAc,gBAG5D,GAAItD,KAAK4J,sBAAwBnK,SAASC,KAAK2c,QAAQwc,cAAe,CAGlE,MAAM,IAAIp4B,MAAMhB,SAASC,KAAK4D,YAAY,aAAc,cAAe,YAG3E,UAAWorB,UAAY,SAAU,CAC7B6P,oBAAsB7P,QAAQ6P,oBAMlC,IAAKkI,WAAW5P,cAAe,CAG3B4P,WAAW5P,cAAgB,IAAIp3B,SAASC,KAAKoC,wBACzCwzB,IAAKt1B,KAAK25B,WACV/vB,oBAAqB5J,KAAK4J,sBAG9B68B,WAAW5P,cAAc+J,SACpBiH,KAAK,WACF,OAAOpB,WAAW5P,cAAcoH,MAAMyJ,SAAUjJ,YAEnDoJ,KAAK,WACFF,oBACD,SAAUtmC,OAAQM,OAAQC,MACzBP,OAAS5B,SAASE,KAAKI,SAASuC,eAAejB,OAAQM,OAAQC,MAC/D0d,SAAS1e,OAAOR,KAAMiB,OAAOM,OAAQN,OAAOO,YAEjD,CACH,MAAM,IAAInB,MAAMhB,SAASC,KAAK4D,YAAY,aAAc,cAAe,aAE7E,MAAOvE,OACL,GAAIU,SAASE,KAAKI,SAASM,kBAAmB,CAC1C,MAAMtB,UACH,CACHugB,SAAS1e,OAAOZ,KAAMP,SAASC,KAAK2c,QAAQkhB,iBACxCxa,YAAahkB,SAIzB,OAAOugB,SAASnf,WAYpBH,KAAK8nC,WAAa,WACd,IAAIxoB,SAAW,IAAI7f,SAASE,KAAKI,SAC7BgjB,YAEJ,IACI0jB,WAAWpjC,UAAU,kBAAmBwjC,2BAA4B7mC,MAEpEymC,WAAWhJ,YAAYne,UACzB,MAAOzgB,GAELkkB,YAAc,IAAItiB,MACdhB,SAASC,KAAK4D,YAAY,aAAc,cAAe,aAAczE,EAAE6E,UAI/E,GAAIqf,YAAa,CACb,GAAItjB,SAASE,KAAKI,SAASM,kBAAmB,CAC1C,MAAM0iB,gBACH,CACHzD,SAAS1e,OAAOZ,KAAMP,SAASC,KAAK2c,QAAQkhB,iBACxCxa,YAAaA,mBAGlB,CACH,OAAOzD,SAASnf,YAIxBH,KAAKg0B,WAAa,SAAUjB,WAAYgV,YAAatJ,SAAUuJ,MAC3D,IAAI1oB,SAAW,IAAI7f,SAASE,KAAKI,SAC7B65B,YACAqO,YACAzG,aACA0G,UACAnlB,YACAwb,oBACAmJ,SACAhZ,QACA+S,aAEJ,IACI,GAAIzhC,KAAKu8B,eAAgB,CAErB,MAAM,IAAI97B,MAAMhB,SAASC,KAAK4D,YAAY,aAAc,gBAI5D,UAAWyvB,aAAe,SAAU,CAChC6G,aAAe7G,iBACZ,GAAIA,sBAAsBhvB,MAAO,CACpC61B,YAAc7G,eACX,CACH,MAAM,IAAItyB,MAAMhB,SAASC,KAAK4D,YAC1B,aACA,cACA,aACA,kGAKR,GAAIykC,YAAa,CACb,UAAWA,cAAgB,SAAU,CACjC,GAAI/nC,KAAK4J,sBAAwBnK,SAASC,KAAK2c,QAAQwc,cAAe,CAGlE,MAAM,IAAIp4B,MAAMhB,SAASC,KAAK4D,YAAY,aAAc,YAE5DokC,SAAWK,YAEX,GAAIC,KAAM,CACNtZ,QAAUsZ,KACVtZ,QAAQ+S,aAAer+B,gBAExB,UAAW2kC,cAAgB,SAAU,CACxCrZ,QAAUqZ,gBACP,CAEH,MAAM,IAAItnC,MAAMhB,SAASC,KAAK4D,YAC1B,aACA,cACA,IACA,SACA,gBAKZ,UAAWorB,UAAY,SAAU,CAE7B6P,oBAAsB7P,QAAQ6P,oBAC9B,GAAI7P,QAAQ+S,aAAc,CACtBA,aAAe/S,QAAQ+S,kBACpB,GAAIzhC,KAAKyhC,aAAc,CAC1BA,aAAezhC,KAAKyhC,cAK5B,IAAKA,eAAiBzhC,KAAKyhC,eAAiBiG,SAAU,CAClD,MAAM,IAAIjnC,MAAMhB,SAASC,KAAK4D,YAAY,eA4B9CmjC,WAAWpjC,UAAU,kBAAmB0jC,kBAAmB/mC,MAE3DioC,YAAcrO,YAAYz2B,OAC1Bmc,SAAS+nB,aAAeY,YACxB3oB,SAAS8nB,sBAAwB,EACjC9nB,SAAS6nB,YACT7nB,SAAS6nB,SAAShkC,OAAS8kC,YAE3B,IAAKzG,aAAe,EAAGA,aAAeyG,YAAazG,cAAgB,EAAG,CAClEze,YAAc3f,UACd8kC,UAAY9kC,UACZ,IACI8kC,UAAYzB,WAAWzS,YAEfjB,WAAY6G,YAAY4H,cACxBniB,MAAO,KACPoa,SAAUiO,SACVjJ,SAAUA,SACVnf,SAAUA,SACVkiB,aAAcA,aACdjD,oBAAqBA,oBACrBkD,aAAcA,aACdK,kBAAmB,OAG7B,MAAOjjC,GACLkkB,YAAc,IAAItiB,MAAM,mDAAqD5B,EAAE6E,SAGnF,GAAIwkC,YAAczoC,SAASC,KAAK2c,QAAQgjB,cAAe,CASnD/f,SAAS4nB,sBAAwBznC,SAASC,KAAK2c,QAAQkhB,gBACvD,GAAIxa,YAAa,CACbmlB,UAAYzoC,SAASC,KAAK2c,QAAQkhB,gBAEtCje,SAAS6nB,SAAS3F,eACdzO,WAAY6G,YAAY4H,cACxB7/B,OAAQumC,UACRnlB,YAAaA,YACb9gB,IAAKmB,WAETkc,SAAS8nB,uBAAyB,GAI1C,GAAK9nB,SAAS8nB,wBAA0Ba,cAAiB3oB,SAASgoB,kBAAmB,CAQjF,GAAIhoB,SAAS4nB,wBAA0BznC,SAASC,KAAK2c,QAAQkhB,gBAAiB,CAC1Eje,SAAS1e,OAAOZ,KAAMP,SAASC,KAAK2c,QAAQkhB,gBAAiBje,SAAS6nB,cACnE,CACH7nB,SAAS3e,QAAQX,KAAMP,SAASC,KAAK2c,QAAQuhB,QAASte,SAAS6nB,YAGzE,MAAOpoC,OACL,GAAIU,SAASE,KAAKI,SAASM,kBAAmB,CAC1C,MAAMtB,UACH,CACHugB,SAAS1e,OAAOZ,KAAMP,SAASC,KAAK2c,QAAQkhB,iBACxCxa,YAAahkB,SAIzB,OAAOugB,SAASnf,WAUpBH,KAAK4gC,OAAS,WACV,IAAIthB,SAAW,IAAI7f,SAASE,KAAKI,SAC7BooC,SAAWnoC,KAAKyhC,aAEpB,IAMI,GAAIzhC,KAAK4J,sBAAwBnK,SAASC,KAAK2c,QAAQwc,cAAe,CAGlE,MAAM,IAAIp4B,MAAMhB,SAASC,KAAK4D,YAC1B,aACA,cACA,aAIRtD,KAAK8nC,aACAD,KAAK,WACF,GAAIM,SAAU,CACV,OAAOA,SAASvH,SAGpBthB,SAAS3e,QAAQP,KAAMX,SAASC,KAAK2c,QAAQuhB,cAEhDiK,KAAK,SAAUxmC,OAAQM,OAAQC,MAC5BP,OAAS5B,SAASE,KAAKI,SAASuC,eAAejB,OAAQM,OAAQC,MAC/D0d,SAAS3e,QAAQP,KAAMiB,OAAOM,OAAQN,OAAOO,OAC9C,SAAUP,OAAQM,OAAQC,MACzBP,OAAS5B,SAASE,KAAKI,SAASuC,eAAejB,OAAQM,OAAQC,MAC/D0d,SAAS1e,OAAOR,KAAMiB,OAAOM,OAAQN,OAAOO,QAEtD,MAAO7C,OACL,GAAIU,SAASE,KAAKI,SAASM,kBAAmB,CAC1C,MAAMtB,UACH,CACHugB,SAAS1e,OAAOR,KAAMX,SAASC,KAAK2c,QAAQkhB,iBACxCxa,YAAahkB,SAKzB,OAAOugB,SAASnf,WAIpBH,KAAKihC,WAAa,WACdwF,WAAWxF,aACX,OAAOjhC,KAAK4gC,UAGhB5gC,KAAK0iC,KAAO,WACR,IAAIpjB,SAAW,IAAI7f,SAASE,KAAKI,SAEjC,IACI,GAAIC,KAAKu8B,eAAgB,CAErB,MAAM,IAAI97B,MAAMhB,SAASC,KAAK4D,YAAY,aAAc,gBAG5D,IACImjC,WAAW/D,MACPrjB,MAAO,KACPC,SAAUA,SACVY,aAAcunB,iBAEpB,MAAO5oC,GACL,MAAM,IAAI4B,MAAM,6CAA+C5B,EAAE6E,UAEvE,MAAO3E,OACL,GAAIU,SAASE,KAAKI,SAASM,kBAAmB,CAC1C,MAAMtB,UACH,CACHugB,SAAS1e,OAAOZ,KAAMP,SAASC,KAAK2c,QAAQkhB,iBACxCxa,YAAahkB,SAKzB,OAAOugB,SAASnf,WAQpBH,KAAK4nC,aAAe,WAChB,IAAItoB,SAAW,IAAI7f,SAASE,KAAKI,SAC7BkC,IAAM,IAAItD,eACVgD,OACAvB,KAAOJ,KAEX,IACI,GAAIA,KAAKu8B,eAAgB,CAErB,MAAM,IAAI97B,MAAMhB,SAASC,KAAK4D,YAAY,aAAc,gBAI5D,GAAItD,KAAKg5B,cAAgBv5B,SAASC,KAAK2c,QAAQ4c,eAAiBj5B,KAAKyhC,aAAc,CAC/EgF,WAAWhmB,aACPxe,IACA,MACAwkC,WAAW/M,YACX,KACA,WACIz3B,IAAIoe,mBAAqB,WAErB,IAAIpe,IAAMjC,KACNooC,SACAxmC,KAEJ,GAAIK,IAAIqqB,aAAe,EAAG,CACtB1qB,MACIK,IAAKA,IACL4gC,cAAez/B,UACfi9B,yBAA0B,KAC1ByD,kBAAmB,OAKvB2C,WAAW1D,mBAAmBnhC,MAE9B,GAAIK,IAAI+oB,QAAU,KAAO/oB,IAAI+oB,OAAS,IAAK,CACvC1L,SAAS3e,QACLP,KACAX,SAASC,KAAK2c,QAAQuhB,QACtBh8B,UAED,CACH,GAAIK,IAAI+oB,SAAW,IAAK,CACpBod,SAAW3oC,SAASC,KAAKoC,uBAAuB2gC,sBAAsBxgC,SACnE,CACHmmC,SAAW3oC,SAASC,KAAK2c,QAAQkhB,gBAErCje,SAAS1e,OAAOR,KAAMgoC,SAAUxmC,SAK5C,IACIK,IAAI8d,OACN,MAAOlhB,GACL,MAAM,IAAI4B,MAAM,kDAAoD5B,EAAE6E,gBAI/E,CAGH/B,OAASlC,SAASC,KAAK2c,QAAQgsB,8BAC/B/oB,SAAS1e,OAAOR,KAAMuB,QAASM,IAAKA,OAG1C,MAAOlD,OACL,GAAIU,SAASE,KAAKI,SAASM,kBAAmB,CAC1C,MAAMtB,UACH,CACHugB,SAAS1e,OAAOR,KAAMX,SAASC,KAAK2c,QAAQkhB,iBACxCxa,YAAahkB,SAIzB,OAAOugB,SAASnf,WAOpBH,KAAK41B,WAAa,SAAUC,SACxB4Q,WAAWnN,mBAAmB1D,WAAWC,UAU7C71B,KAAK21B,mBAAqB,SAAU/I,aAAcC,eAC9C4Z,WAAWnN,mBAAmB3D,mBAAmB/I,aAAcC,gBAKnE7sB,KAAK81B,WAAa,WACd,OAAO2Q,WAAWnN,mBAAmBxD,cAKzC91B,KAAK+1B,mBAAqB,SAAUnJ,cAChC,OAAO6Z,WAAWnN,mBAAmBvD,mBAAmBnJ,eAI5D5sB,KAAKw3B,eAAiB,SAAUxE,QAAS9wB,SACrC9B,KAAKyD,QAAQ,SAAUzD,KAAM8B,UAGjClC,KAAK03B,gBAAkB,SAAU1E,QAAS6P,cAAe3gC,SACrD9B,KAAKyD,QAAQ,UAAWzD,KAAMyiC,cAAe3gC,UAKjD,GAAKd,UAAU+B,OAAS,UAAc/B,UAAU,KAAO,SAAW,CAG9D,GAAIstB,QAAQiL,mBAAsBjL,QAAQiL,aAAe,SAAW,CAChEvB,YAAc1J,QAAQiL,eACnB,CACH,MAAM,IAAIl5B,MAAMhB,SAASC,KAAK4D,YAC1B,aACA,cACA,kBACA,iFAIR,GAAIorB,QAAQ9kB,oBAAqB,CAC7B,UAAW8kB,QAAQ9kB,sBAAwB,SAAU,CACjD,MAAM,IAAInJ,MAAMhB,SAASC,KAAK4D,YAC1B,aACA,cACA,kBACA,gFAIRorB,QAAQ9kB,oBAAsB8kB,QAAQ9kB,oBAAoBnG,kBACvD,CACHirB,QAAQ9kB,oBAAsBnK,SAASC,KAAK2c,QAAQoc,eAIxD,GAAI/J,QAAQ+S,aAAc,CACtB,UAAW/S,QAAQ+S,eAAiB,SAAU,CAG1C,MAAM,IAAIhhC,MAAMhB,SAASC,KAAK4D,YAC1B,aACA,cACA,UACA,cACA,iBAIR,GAEQorB,QAAQ+S,aAAa73B,sBAAwBnK,SAASC,KAAK2c,QAAQisB,oBAChE5Z,QAAQ+S,aAAa73B,sBAAwB8kB,QAAQ9kB,qBAIxD8kB,QAAQ+S,aAAa73B,sBAAwBnK,SAASC,KAAK2c,QAAQisB,oBAChE5Z,QAAQ9kB,sBAAwBnK,SAASC,KAAK2c,QAAQwc,cAE/D,CAGE,MAAM,IAAIp4B,MAAMhB,SAASC,KAAK4D,YAC1B,aACA,cACAorB,QAAQ+S,aAAa73B,oBACrB8kB,QAAQ9kB,sBAIhB,UAAW8kB,QAAQ+S,aAAaiE,uBAAyB,WAAY,CACjE,IAAKhX,QAAQ+S,aAAaiE,uBAAwB,CAE9C,MAAM,IAAIjlC,MAAMhB,SAASC,KAAK4D,YAAY,aAAc,qBAEzD,CAEH,MAAM,IAAI7C,MAAMhB,SAASC,KAAK4D,YAC1B,aACA,cACA,yBACA,+BAGL,GAAIorB,QAAQ9kB,sBAAwBnK,SAASC,KAAK2c,QAAQwc,cAAe,CAG5E,MAAM,IAAIp4B,MAAMhB,SAASC,KAAK4D,YAAY,oBAG3C,CACH,MAAM,IAAI7C,MAAMhB,SAASC,KAAK4D,YAC1B,aACA,cACA,kBACA,iDAIRqD,MAAQ+nB,QAAQrqB,KAEhBoiC,WAAa,IAAIhnC,SAASC,KAAK2c,SAC3Bua,YAAajwB,MACbwwB,QAAS,KACTvtB,oBAAqB8kB,QAAQ9kB,oBAC7B+vB,WAAYjL,QAAQiL,WACpBzG,YAAalzB,KACbyhC,aAAc/S,QAAQ+S,eAG1B,IACI,GAAI/S,QAAQmH,QAAS,CACjB71B,KAAK41B,WAAWlH,QAAQmH,SAE5B4Q,WAAWpjC,UAAU,SAAUrD,KAAKw3B,eAAgBx3B,MACpDymC,WAAWpjC,UAAU,UAAWrD,KAAK03B,gBAAiB13B,MACxD,MAAOuoC,KACL9B,WAAarjC,UACb,MAAMmlC,MAMd9oC,SAASC,KAAKmC,YAAY3B,UAAY,IAAIT,SAASE,KAAK4C,WACxD9C,SAASC,KAAKmC,YAAY3B,UAAU+tB,YAAcxuB,SAASC,KAAKmC,YAChE,SAAS2mC,6BAA6BxlC,KAAMC,IAAKC,cAC7CA,aAAaN,UAAYQ,UACzB,IAAIwY,MAAQ,MAGZ5b,KAAKwmC,YAAYtiC,QAAQ,SAAUoZ,WAC/B,GAAIra,MAAQqa,UAAU7Z,cAAe,CACjCmY,MAAQ,QAGhB,IAAKA,MAAO,CACR,MAAM,IAAInb,MAAMhB,SAASC,KAAK4D,YAAY,aAAcL,MAG5D,GAAID,KAAKG,OAAS,EAAG,CACjB,MAAM,IAAI1C,MAAMhB,SAASC,KAAK4D,YAAY,aAAc,IAG5D,UAAWN,KAAK,KAAO,SAAU,CAC7B,MAAM,IAAIvC,MAAMhB,SAASC,KAAK4D,YAAY,eAG9C,UAAWN,KAAK,KAAO,WAAY,CAC/B,MAAM,IAAIvC,MAAMhB,SAASC,KAAK4D,YAAY,eAG9CJ,aAAaR,GAAKM,KAAK,GAEvB,GAAIA,KAAKG,OAAS,EAAG,CACjB,UAAWH,KAAK,KAAO,SAAU,CAC7B,MAAM,IAAIvC,MAAMhB,SAASC,KAAK4D,YAAY,aAAcL,MAG5DC,aAAaP,MAAQK,KAAK,IAIlCvD,SAASC,KAAKmC,YAAY3B,UAAUsmC,aAC3B,UAAW,UAEpB/mC,SAASC,KAAKmC,YAAY3B,UAAU6C,kBAAoBylC,6BACxD/oC,SAASC,KAAKmC,YAAY3B,UAAUqD,SAAW,SAAU2qB,OACrD,MAAO,6BAGXzuB,SAASC,KAAKyzB,WAAa,SAAUzE,SACjC,IAAIpP,SAAW,IAAI7f,SAASE,KAAKI,SAC7B0hC,aACAthC,QACAsoC,0BAIJ,SAASC,qBAAqBrnC,OAAQM,OAAQC,MAK1CP,OAAS5B,SAASE,KAAKI,SAASuC,eAAejB,OAAQM,OAAQC,MAE/D,GAAI6/B,cAAgBA,aAAaiE,uBAAwB,CACrD,IAAIzJ,SAAW,WACX3c,SAAS1e,OAAOS,OAAOM,OAAQN,OAAOO,OAG1C6/B,aAAab,SAASiH,KAAK5L,SAAUA,cAClC,CACH3c,SAAS1e,OAAOS,OAAOM,OAAQN,OAAOO,OAK9C,SAAS+mC,sBAAsBC,QAC3BtpB,SAAS1e,OAAOnB,SAASC,KAAK2c,QAAQkhB,iBAAkBqL,OAAUA,SAGtE,SAASC,aAAaxnC,QAClB,IAAI6xB,YAEJ,IACIA,YAAc,IAAIzzB,SAASC,KAAKmC,YAAY6sB,SAC5C,IACIwE,YAAY0U,eACPC,KAAK,WACF,OAAO3U,YAAYc,WAAWtF,QAAQqE,aACvC2V,sBACFb,KAAK,SAAUxmC,OAAQM,OAAQC,MAC5BP,OAAS5B,SAASE,KAAKI,SAASuC,eAAejB,OAAQM,OAAQC,MAC/D0d,SAAS3e,QAAQU,OAAO6xB,YAAazzB,SAASC,KAAK2c,QAAQuhB,UAC5D8K,sBACT,MAAO7pC,GACL6pC,qBACIxV,YACAzzB,SAASC,KAAK2c,QAAQkhB,iBACrBxa,YAAalkB,KAGxB,MAAOiqC,IACLJ,qBACIxV,YACAzzB,SAASC,KAAK2c,QAAQkhB,iBACrBxa,YAAa+lB,MAS1B,SAASC,UAAUC,UACf,IAAIjmB,YAIJ,UAAW2L,QAAQua,gBAAkB,YAAa,CAC9Cva,QAAQua,gBACHpB,KAAK,SAAUlmC,QACZ,IACIqnC,SAAS/K,MAAMt8B,OAAO+lC,SAAU/lC,OAAO88B,UAClCoJ,KAAKgB,aAAcH,sBAC1B,MAAO7pC,GACL6pC,qBACIM,SACAvpC,SAASC,KAAK2c,QAAQkhB,iBAElBxa,YAAalkB,MAI1B8pC,4BACJ,GAAIja,QAAQgZ,UAAYhZ,QAAQ+P,SAAU,CAC7C,IACIuK,SAAS/K,MAAMvP,QAAQgZ,SAAUhZ,QAAQ+P,UACpCoJ,KAAKgB,aAAcH,sBAC1B,MAAO7pC,GACL6pC,qBACIM,SACAvpC,SAASC,KAAK2c,QAAQkhB,iBAElBxa,YAAalkB,SAItB,CAEHkkB,YAAc,IAAItiB,MAAMhB,SAASC,KAAK4D,YAClC,aACA,iBAEJolC,qBACIM,SACAvpC,SAASC,KAAK2c,QAAQiqB,wBAIlBvjB,YAAaA,eAM7B,UAAW2L,UAAY,SAAU,CAE7B,MAAM,IAAIjuB,MAAMhB,SAASC,KAAK4D,YAC1B,aACA,eACA,UACA,WAIR,UAAWorB,QAAQua,gBAAkB,oBAC1Bva,QAAQua,gBAAkB,WAAY,CAE7C,MAAM,IAAIxoC,MAAMhB,SAASC,KAAK4D,YAC1B,aACA,eACA,wBACA,aAKR,IAII,GAAIorB,QAAQ9kB,sBAAwBnK,SAASC,KAAK2c,QAAQwc,cAAe,CACrE,IAAKnK,QAAQwa,oBAAsBxa,QAAQya,gCAAiC,CAIxE,MAAM,IAAI1oC,MAAMhB,SAASC,KAAK4D,YAAY,gBAIlD,GAAIorB,QAAQwa,kBAAmB,CAC3BT,uBAAuBnT,IAAM5G,QAAQwa,kBACrCT,uBAAuB7+B,oBAAsB8kB,QAAQya,gCAGrD,UAAWV,uBAAuB7+B,sBAAwB,SAAU,CAGhE,MAAM,IAAInJ,MAAMhB,SAASC,KAAK4D,YAC1B,aACA,2BACA,SACA,aACA,yCAGL,CACHmlC,uBAAuBnT,IAAM5G,QAAQiL,WACrC8O,uBAAuB7+B,oBAAsB8kB,QAAQ9kB,oBAGzD63B,aAAe,IAAIhiC,SAASC,KAAKoC,uBAAuB2mC,wBACxD/Z,QAAQ+S,aAAeA,aAEvB,GAAIA,aAAaiE,uBAAwB,CACrCmD,aAAapH,kBACV,CAEH,GAAIA,aAAa73B,sBAAwBnK,SAASC,KAAK2c,QAAQoc,eAAgB,CAC3EgJ,aAAaxD,QACR4J,KAAKgB,aAAcH,0BACrB,CAEHK,UAAUtH,gBAGpB,MAAO1iC,OAEL2pC,qBACI,KACAjpC,SAASC,KAAK2c,QAAQkhB,iBAElBxa,YAAahkB,QAKzB,OAAOugB,SAASnf,WAGpBV,SAASC,KAAK0pC,sBAAwB,WAClC,IAAIlW,YACAngB,IACAuM,SAAW,IAAI7f,SAASE,KAAKI,SAC7B4zB,aAAel0B,SAASC,KAAK8d,gBAAgBkV,cAC7C2W,sBAEJ,IACI,IAAKt2B,OAAO4gB,aAAc,CACtB,GAAIA,aAAa/L,eAAe7U,KAAM,CAClCmgB,YAAcS,aAAa5gB,KAE3Bs2B,mBAAmB1lC,KAAKuvB,YAAY+N,eAI5CxhC,SAASE,KAAKI,SAASwB,KAAK8nC,oBACvBxB,KAAK,WACFvoB,SAAS3e,QAAQlB,SAASC,KAAK2c,QAAQuhB,UACxC,SAAUv8B,OAAQM,OAAQC,MACzBP,OAAS5B,SAASE,KAAKI,SAASuC,eAAejB,OAAQM,OAAQC,MAC/D0d,SAAS1e,OAAOnB,SAASC,KAAK2c,QAAQkhB,gBAAiB37B,QAGjE,MAAO7C,OACL,GAAIU,SAASE,KAAKI,SAASM,kBAAmB,CAC1C,MAAMtB,UACH,CACHugB,SAAS1e,OAAOnB,SAASC,KAAK2c,QAAQkhB,iBAClCxa,YAAahkB,SAKzB,OAAOugB,SAASnf,YAj1JxB,GAs1JA,UAAWmpC,UAAY,YAAa,CAChCA,QAAQ7pC,SAAWA,UAuBtB,WAEG,aAOA,UAAWA,WAAa,YAAa,CACjCA,YAEJ,UAAWA,SAASC,OAAS,YAAa,CACtCD,SAASC,QASbD,SAASC,KAAKoC,uBAAyB,SAASA,uBAAwBynC,YACpE,IAAIpB,SACAqB,UACAlU,IAGJ,UAAWiU,aAAe,SAAU,CAGhCvpC,KAAKypC,gBACD,cACAF,WAAW3/B,oBACX,iCACA,kCAGJ5J,KAAKypC,gBACD,cACAF,WAAWjU,IACX,kBACA,uBAED,CAGH,MAAM,IAAI70B,MAAMhB,SAASC,KAAK4D,YAC1B,aACA,yBACA,kBACA,qDAIRkmC,UAAYD,WAAW3/B,oBAAoBnG,cAC3C,OAAQ+lC,WACR,KAAK/pC,SAASC,KAAK2c,QAAQoc,eACvBz4B,KAAK0pC,YAAYH,WAAWjU,IAAK71B,SAASC,KAAK2c,QAAQoc,gBAClDkR,UAAalqC,SAASC,KAAKoC,uBAAuB8nC,oBACvDzB,SAAWnoC,KACX,MACJ,KAAKP,SAASC,KAAK2c,QAAQuc,gBACvBuP,SAAW,IAAI1oC,SAASC,KAAKmqC,4BAA4BN,WAAWjU,KACpE,MACJ,KAAK71B,SAASC,KAAK2c,QAAQsc,eACvBwP,SAAW,IAAI1oC,SAASC,KAAKoqC,2BAA2BP,WAAWjU,KACnE,MACJ,KAAK71B,SAASC,KAAK2c,QAAQisB,mBACvBH,SAAW,IAAI1oC,SAASC,KAAKqqC,0BAA0BR,WAAWjU,KAClE,MACJ,QAGI,MAAM,IAAI70B,MAAMhB,SAASC,KAAK4D,YAC1B,aACA,yBACA,cACA,cACA,wBAKR,OAAO6kC,UAQX1oC,SAASC,KAAKoC,uBAAuB5B,UAAU8pC,YAC3C,SAAUC,WACN,IAAI3qB,SAAW,IAAI7f,SAASE,KAAKI,SAC7BkC,IACAu8B,cACA9I,OACAt1B,KAAOJ,KAEX,IACI,GAAIA,KAAKkqC,UAAW,CAGhB,MAAM,IAAIzpC,MAAMhB,SAASC,KAAK4D,YAAY,aAAc,2BAG5DrB,IAAM,IAAItD,eAEVsD,IAAIoe,mBAAqB,WACrB,GAAIpe,IAAIqqB,aAAe,EAAG,CAEtBlsB,KAAK2+B,oBAAoB98B,IAAKqd,YAItC,GAAI7f,SAASC,KAAK2c,QAAQqgB,cAAe,CACrC8B,cAAgB/+B,SAASC,KAAK2c,QAAQsgB,mBAAmB38B,KAAK2pC,eAC3D,CACHnL,cAAgBx+B,KAAK2pC,UAGzB3pC,KAAKmqC,kBAAkBloC,IAAKu8B,eAS5Bv8B,IAAI6d,iBAAiB,SAAU,oBAE/B7d,IAAI8d,KAAKkqB,WACX,MAAOlrC,OACL,GAAIU,SAASE,KAAKI,SAASM,kBAAmB,CAC1C,MAAMtB,UACH,CACHugB,SAAS1e,OAAOZ,KAAMP,SAASC,KAAK2c,QAAQkhB,iBACxCxa,YAAahkB,SAIzB,OAAOugB,SAASnf,WAQxBV,SAASC,KAAKoC,uBAAuB5B,UAAU+9B,MAAQ,WACnD,OAAOj+B,KAAKgqC,eAIhBvqC,SAASC,KAAKoC,uBAAuB5B,UAAUiqC,kBAAoB,SAAUloC,IAAKqzB,KAC9ErzB,IAAI89B,KAAK,MAAOzK,IAAK,MACrB71B,SAASC,KAAK2c,QAAQuiB,mBAAmB38B,MAI7CxC,SAASC,KAAKoC,uBAAuB5B,UAAU6+B,oBAAsB,SAAU98B,IAAKqd,UAChF,IAAI3d,OAEJ,GAAIM,IAAI+oB,SAAW,IAAK,CAIpBhrB,KAAKkqC,UAAY,KACjBlqC,KAAKoqC,aACLzoC,OAASlC,SAASC,KAAK2c,QAAQuhB,aAC5B,GAAI37B,IAAI+oB,SAAW,IAAK,CAE3BrpB,OAASlC,SAASC,KAAK2c,QAAQiqB,2BAC5B,CACH3kC,OAASlC,SAASC,KAAK2c,QAAQkhB,gBAGnCv9B,KAAKqqC,eAAe/qB,SAAU3d,QAASM,IAAOA,OAKlDxC,SAASC,KAAKoC,uBAAuB5B,UAAU0gC,OAAS,WACpD,IAAIthB,SAAW,IAAI7f,SAASE,KAAKI,SAEjC,IACIC,KAAKsqC,SACLhrB,SAAS3e,QAAQX,KAAMP,SAASC,KAAK2c,QAAQuhB,YAC/C,MAAO7+B,OACL,GAAIU,SAASE,KAAKI,SAASM,kBAAmB,CAC1C,MAAMtB,UACH,CACHugB,SAAS1e,OAAOZ,KAAMP,SAASC,KAAK2c,QAAQkhB,iBACxCxa,YAAahkB,SAIzB,OAAOugB,SAASnf,WAIpBV,SAASC,KAAKoC,uBAAuB5B,UAAUwlC,qBAAuB,WAClE,OAAO1lC,KAAKkqC,WAKhBzqC,SAASC,KAAKoC,uBAAuB5B,UAAUqqC,gBAAkB,WAC7D,OAAO,OAYX9qC,SAASC,KAAKoC,uBAAuB5B,UAAU08B,yBAA2B,SAAU36B,IAChFuyB,KACAc,IACAjW,MACA4c,UACA,IAAIlZ,YAEJ,GAAI/iB,KAAK0lC,uBAAwB,CAC7BzjC,IAAI89B,KAAKvL,KAAMc,IAAKjW,OAGpBpd,IAAI6d,iBAAiB,SAAU,oBAC/Bmc,SAASh6B,SACN,CAEH8gB,YAAc,IAAItiB,MAAMhB,SAASC,KAAK4D,YAAY,aAAc,2BAChE24B,SAASlZ,eAQjBtjB,SAASC,KAAKoC,uBAAuB5B,UAAUwpC,YAAc,SAAUc,SACnEhB,UACAiB,YACA,IAAIC,QACAhiB,OAEJhhB,OAAOmS,eAAe7Z,KAAM,OAEpB+Z,IAAK,WACD,OAAO/Z,KAAKq1B,MAEhBpb,WAAY,OAGpBvS,OAAOmS,eAAe7Z,KAAM,uBAEpB+Z,IAAK,WACD,OAAO/Z,KAAKw4B,sBAEhBve,WAAY,OAMpB,GAAIuwB,SAASA,SAASrnC,OAAS,KAAO,IAAK,CACvCunC,QAAUF,SAASriC,UAAU,EAAGqiC,SAASrnC,OAAS,OAC/C,CACHunC,QAAUF,SAMd,IAAK9hB,UAAU+hB,WAAY,CACvB,GAAIA,WAAW7iB,eAAec,QAAS,CACnC1oB,KAAK0oB,QAAUgiB,QAAUD,WAAW/hB,SAI5C1oB,KAAKw4B,qBAAuBgR,UAC5BxpC,KAAKq1B,KAAOmV,SAEZxqC,KAAKkqC,UAAY,MACjBlqC,KAAK2qC,WACDrV,IAAK,OACLsV,SAAU,aAKd,UAAW3rC,iBAAmB,YAAa,CAEvC,MAAM,IAAIwB,MAAMhB,SAASC,KAAK4D,YAAY,aACtC,yBACA,mBAGRtD,KAAK6qC,SAAW5rC,eAGhBe,KAAK42B,YAAc52B,KAAKq1B,KACxBr1B,KAAK2qC,UAAUrV,IAAMt1B,KAAK42B,YAAc52B,KAAK2qC,UAAUrV,IACvDt1B,KAAK2qC,UAAUC,SAAW5qC,KAAK42B,YAAc52B,KAAK2qC,UAAUC,SAE5D,GAAI5qC,KAAK8qC,oBAAqB,CAC1B9qC,KAAKkqC,UAAY,OASzBzqC,SAASC,KAAKoC,uBAAuB5B,UAAUkqC,WAAa,WACxDpqC,KAAK6qC,SAAStmC,QAAQvE,KAAK2qC,UAAUrV,IAAK9wB,KAAKC,UAAUzE,KAAKq1B,OAC9Dr1B,KAAK6qC,SAAStmC,QAAQvE,KAAK2qC,UAAUC,SAAUpmC,KAAKC,UAAUzE,KAAKkqC,aAIvEzqC,SAASC,KAAKoC,uBAAuB5B,UAAU6qC,kBAAoB,SAAUC,UACzE,IAAIrmC,QAAU3E,KAAK6qC,SAASjmC,QAAQomC,UAChCvlC,MAAQ,KAEZ,GAAId,UAAY,KAAM,CAClB,IACIc,MAAQjB,KAAKK,MAAMF,SACrB,MAAO9F,GACL4G,MAAQ,MAGhB,OAAOA,OAIXhG,SAASC,KAAKoC,uBAAuB5B,UAAU+qC,aAAe,WAC1D,OAAOjrC,KAAK+qC,kBAAkB/qC,KAAK2qC,UAAUrV,MAIjD71B,SAASC,KAAKoC,uBAAuB5B,UAAU4qC,kBAAoB,WAC/D,OAAO9qC,KAAK+qC,kBAAkB/qC,KAAK2qC,UAAUC,WAIjDnrC,SAASC,KAAKoC,uBAAuB5B,UAAUgrC,WAAa,SAAUtpC,MAClE5B,KAAK6qC,SAAS9lC,WAAW/E,KAAK2qC,UAAUrV,KACxCt1B,KAAK6qC,SAAS9lC,WAAW/E,KAAK2qC,UAAUC,WAM5CnrC,SAASC,KAAKoC,uBAAuB5B,UAAUoqC,OAAS,WACpDtqC,KAAKkrC,aACLlrC,KAAKkqC,UAAY,OAKrBzqC,SAASC,KAAKoC,uBAAuB5B,UAAUmqC,eAAiB,SAAU/qB,SAAU3d,OAAQC,MACxF,GAAID,SAAWlC,SAASC,KAAK2c,QAAQuhB,QAAS,CAC1Cte,SAAS3e,QAAQX,KAAM2B,OAAQC,UAC5B,CACH0d,SAAS1e,OAAOZ,KAAM2B,OAAQC,QAKtCnC,SAASC,KAAKoC,uBAAuB5B,UAAUupC,gBAAkB,SAAU3rB,OACvEqtB,WACAC,YACAC,SAGA,UAAWF,aAAe,SAAU,CAEhC,MAAM,IAAI1qC,MAAMhB,SAASC,KAAK4D,YAC1B,aACA,yBACA8nC,YACA,SACAttB,cAED,GAAIqtB,WAAWhoC,SAAW,EAAG,CAEhC,MAAM,IAAI1C,MAAMhB,SAASC,KAAK4D,YAC1B,aACA,yBACA+nC,QACAvtB,WAYZre,SAASC,KAAKoC,uBAAuB2gC,sBAAwB,SAAUxgC,KACnE,IAAIy9B,YACAntB,WACA5Q,OAASlC,SAASC,KAAK2c,QAAQiqB,uBAEnC,GAAIrkC,IAAI+oB,SAAW,IAAK,CACpB0U,YAAcz9B,IAAI+5B,kBAAkB,gBACpC,GAAI0D,aAAgBA,YAAYrlB,QAAQ,qBAAuB,GAAMpY,IAAIqpB,aAAc,CACnF/Y,WAAa/N,KAAKK,MAAM5C,IAAIqpB,cAC5B,GAAI/Y,WAAWxT,QAAU,0BAA2B,CAChD4C,OAASlC,SAASC,KAAK2c,QAAQ4qB,oBAGpC,CACHtlC,OAAS,KAEb,OAAOA,QAGX+F,OAAOmS,eAAepa,SAASC,KAAKoC,uBAAwB,qBACxD2D,MAAO,oBACPwU,WAAY,OAEhBvS,OAAOmS,eAAepa,SAASC,KAAKoC,uBAAwB,uBACxD2D,MAAO,uCACPwU,WAAY,OAEhBvS,OAAOmS,eAAepa,SAASC,KAAKoC,uBAAwB,wBACxD2D,MAAO,wCACPwU,WAAY,OAEhBvS,OAAOmS,eAAepa,SAASC,KAAKoC,uBAAwB,gCACxD2D,MAAOhG,SAASC,KAAKoC,uBAAuBwpC,oBAAsB,YAClErxB,WAAY,OAEhBvS,OAAOmS,eAAepa,SAASC,KAAKoC,uBAAwB,kCACxD2D,MAAO,gCACPwU,WAAY,QA9bpB,IAudC,WAEG,aAKAxa,SAASC,KAAKmqC,4BAA8B,SAAUvU,KAClD,IAAIgB,2BACAmD,SAAW,KACXgF,SAAW,KACX/7B,GAGJ1C,KAAK0pC,YAAYpU,IAAK71B,SAASC,KAAK2c,QAAQuc,iBACvC+Q,UAAalqC,SAASC,KAAKoC,uBAAuB8nC,oBAIvD5pC,KAAKsqC,SAKL,SAASiB,uBAAuBvG,KAAM3G,IAClC,IAAI4G,IAAMD,KAAO,IAAM3G,GACnB6G,KAAO9lC,KAAK6lC,KAChB,MAAO,SAAWC,KAMtBllC,KAAKsqC,OAAS,WACV7Q,SAAW,KACXgF,SAAW,KACXh/B,SAASC,KAAKmqC,4BAA4B3pC,UAAUoqC,OAAOtpC,MAAMhB,OAKrEA,KAAKmqC,kBAAoB,SAAUloC,IAAKqzB,KACpC,IAAI+O,KAEJpiC,IAAI89B,KAAK,MAAOzK,IAAK,MAGrB,GAAImE,SAAU,CAGV4K,KAAOkH,uBAAuB9R,SAAUgF,UACxCx8B,IAAI6d,iBAAiB,gBAAiBukB,MAG1C5kC,SAASC,KAAK2c,QAAQuiB,mBAAmB38B,MAK7CjC,KAAK++B,oBAAsB,SAASyM,0BAA0BvpC,IAAKqd,UAC/D7f,SAASC,KAAKmqC,4BAA4B3pC,UAAU6+B,oBAAoB/9B,MACpEhB,MACCiC,IAAKqd,WAEV,IAAKtf,KAAKkqC,UAAW,CAEjBzQ,SAAW,KACXgF,SAAW,OAOnBz+B,KAAKi+B,MAAQ,SAAUwN,cAAeC,eAElC1rC,KAAKypC,gBAAgB,QAASgC,cAAe,EAAG,YAChDzrC,KAAKypC,gBAAgB,QAASiC,cAAe,EAAG,YAEhDjS,SAAWgS,cACXhN,SAAWiN,cACX,OAAO1rC,KAAKgqC,eAOhBhqC,KAAK48B,yBAA2B,SAAU36B,IAAKuyB,KAAMc,IAAKjW,MAAO4c,UAC7D,IAAIoI,KACAthB,YAEJ,GAAI/iB,KAAK0lC,uBAAwB,CAE7BzjC,IAAI89B,KAAKvL,KAAMc,IAAKjW,OAGpB,GAAIoa,SAAU,CAGV4K,KAAOkH,uBAAuB9R,SAAUgF,UACxCx8B,IAAI6d,iBAAiB,gBAAiBukB,MAG1C5kC,SAASC,KAAK2c,QAAQuiB,mBAAmB38B,KACzCg6B,SAASh6B,SACN,CAEH8gB,YAAc,IAAItiB,MAAMhB,SAASC,KAAK4D,YAAY,aAAc,2BAChE24B,SAASlZ,gBASrB,SAAS4oB,cACTA,WAAWzrC,UAAYT,SAASC,KAAKoC,uBAAuB5B,UAC5DT,SAASC,KAAKmqC,4BAA4B3pC,UAAY,IAAIyrC,WAK1DlsC,SAASC,KAAKmqC,4BAA4B3pC,UAAU+tB,YAChDxuB,SAASC,KAAKmqC,6BA9HtB,IA+JC,WAEG,aAKA,IAAInnC,GAEJjD,SAASC,KAAKoqC,2BAA6B,SAAUxU,KAGjDt1B,KAAK0pC,YAAYpU,IAAK71B,SAASC,KAAK2c,QAAQsc,gBACvCgR,UAAalqC,SAASC,KAAKoC,uBAAuBwpC,oBAC/CM,WAAcnsC,SAASC,KAAKoC,uBAAuB+pC,wBAO/D,SAASC,aACTA,UAAU5rC,UAAYT,SAASC,KAAKoC,uBAAuB5B,UAC3DT,SAASC,KAAKoqC,2BAA2B5pC,UACrC,IAAI4rC,UAKRrsC,SAASC,KAAKoqC,2BAA2B5pC,UAAU+tB,YAC/CxuB,SAASC,KAAKoqC,2BAqBlBrqC,SAASC,KAAKoqC,2BAA2B5pC,UAAU+9B,MAAQ,SAAUwN,cAAeC,eAChF,IAAIpsB,SAAW,IAAI7f,SAASE,KAAKI,SAC7BkC,IACA7B,KAAOJ,KAGXA,KAAKypC,gBAAgB,QAASgC,cAAe,EAAG,YAChDzrC,KAAKypC,gBAAgB,QAASiC,cAAe,EAAG,YAEhD,OAAO1rC,KAAKgqC,YAAY,cAAgBpV,mBAAmB6W,eACnC,eAAiB7W,mBAAmB8W,eAAiB,mBAOjFjsC,SAASC,KAAKoqC,2BAA2B5pC,UAAUiqC,kBAAoB,SAAUloC,IAAKqzB,KAElFrzB,IAAI89B,KAAK,OAAQzK,IAAK,MAEtBrzB,IAAI6d,iBAAiB,gBAAiB,aACtC7d,IAAI6d,iBAAiB,SAAU,YAC/B7d,IAAI6d,iBAAiB,eAAgB,qCAErC7d,IAAI8+B,gBAAkB,MAS1BthC,SAASC,KAAKoqC,2BAA2B5pC,UAAU0gC,OAAS,WACxD,IAAIthB,SAAW,IAAI7f,SAASE,KAAKI,SAC7BkC,IACA7B,KAAOJ,KAEX,IACI,IAAKA,KAAKkqC,UAAW,CAEjB5qB,SAAS3e,QAAQX,KAAMP,SAASC,KAAK2c,QAAQuhB,gBAC1C,CACH37B,IAAM,IAAItD,eACVqB,KAAK+rC,mBAAmB9pC,KAExBA,IAAIoe,mBAAqB,WACrB,GAAIpe,IAAIqqB,aAAe,EAAG,CAEtBlsB,KAAKygC,qBAAqB5+B,IAAKqd,YAIvCrd,IAAI8d,OAQR/f,KAAKsqC,SACP,MAAOvrC,OACL,GAAIU,SAASE,KAAKI,SAASM,kBAAmB,CAC1C,MAAMtB,UACH,CACHugB,SAAS1e,OAAOZ,KAAMP,SAASC,KAAK2c,QAAQkhB,iBACxCxa,YAAahkB,SAIzB,OAAOugB,SAASnf,WAIpBV,SAASC,KAAKoqC,2BAA2B5pC,UAAU6rC,mBAAqB,SAAU9pC,KAC9EA,IAAI89B,KAAK,MAAQ//B,KAAK4rC,WAAY,MAClC3pC,IAAI6d,iBAAiB,gBAAiB,aACtC7d,IAAI8+B,gBAAkB,KACtB9+B,IAAI6d,iBAAiB,SAAU,qBAInCrgB,SAASC,KAAKoqC,2BAA2B5pC,UAAU2gC,qBAAuB,SAAU5+B,IAAKqd,UACrF,IAAI3d,OAEJ,GAAIM,IAAI+oB,SAAW,IAAK,CACpBrpB,OAASlC,SAASC,KAAK2c,QAAQuhB,aAC5B,GAAI37B,IAAI+oB,SAAW,IAAK,CAI3BrpB,OAASlC,SAASC,KAAK2c,QAAQuhB,YAC5B,CACHj8B,OAASlC,SAASC,KAAK2c,QAAQkhB,gBAGnCv9B,KAAKqqC,eAAe/qB,SAAU3d,QAASM,IAAOA,OAiBlDS,GAAKjD,SAASC,KAAKoqC,2BAA2B5pC,UAAU08B,yBACxDn9B,SAASC,KAAKoqC,2BAA2B5pC,UAAU08B,yBAC/C,SAAU36B,IAAKuyB,KAAMc,IAAKjW,MAAO4c,UAE7B,SAAS+P,WAAWjpB,aAChB,GAAIA,uBAAuBtiB,MAAO,CAC9Bw7B,SAASlZ,iBACN,CACH9gB,IAAI8+B,gBAAkB,KACtB9E,SAASh6B,MAIjB,IACIxC,SAASC,KAAKoqC,2BAA2B5pC,UAAU08B,yBAAyBxgB,OAAOpb,MAC/EhB,MACCiC,IAAKuyB,KAAMc,IAAKjW,MAAO2sB,aAE9B,MAAOntC,GACLo9B,SAASp9B,KAGrBY,SAASC,KAAKoqC,2BAA2B5pC,UAAU08B,yBAAyBxgB,OAAS1Z,IA5LzF,IAoNC,WAEG,aAIA,IAAIA,GAGJjD,SAASC,KAAKqqC,0BAA4B,SAAUzU,KAChD,IAAIl1B,KAAOJ,KAEPisC,uBACAC,KACAC,aAAe,KACfC,eACIC,MAAO,gBACPC,aAAc,iBACdC,UAAW,cACXC,WAAY,cACZC,sBAAuB,0BAY/B,SAASC,eAAe9qC,MACpB,IAAIgH,KACA6jC,sBAEJ,GAAI7qC,KAAK+qC,aAAaxpC,OAAQ,CAC1B/C,KAAKyqC,SAAStmC,QAAQ6nC,cAAcC,MAAO7nC,KAAKC,UAAU7C,KAAK+qC,eAEnE,GAAI/qC,KAAKgrC,cAAczpC,OAAQ,CAC3B/C,KAAKyqC,SAAStmC,QAAQ6nC,cAAcE,aAAc9nC,KAAKC,UAAU7C,KAAKgrC,gBAGtEhkC,KAAO,IAAIsB,KAEXuiC,sBAAwB7jC,KAAKW,UAAa3H,KAAKirC,WAAa,IAAO,IACnEzsC,KAAKyqC,SAAStmC,QAAQ6nC,cAAcK,sBAAuBjoC,KAAKC,UAAUgoC,4BACvE,CAGHrsC,KAAKyqC,SAAS9lC,WAAWqnC,cAAcE,cACvClsC,KAAKyqC,SAAS9lC,WAAWqnC,cAAcK,uBAE3CrsC,KAAKyqC,SAAStmC,QAAQ6nC,cAAcG,UAAW/nC,KAAKC,UAAU7C,KAAKkrC,aACnE1sC,KAAKyqC,SAAStmC,QAAQ6nC,cAAcI,WAAYhoC,KAAKC,UAAU7C,KAAKirC,aAKxE,SAASE,sBAAsB/B,UAC3B,IAAIrmC,QAAUvE,KAAKyqC,SAASjmC,QAAQomC,UAChCvlC,MAAQ,KAEZ,GAAId,UAAY,KAAM,CAClB,IACIc,MAAQjB,KAAKK,MAAMF,SACrB,MAAO9F,GACL4G,MAAQ,MAGhB,OAAOA,MAGX,SAASunC,gBACL,OAAOD,sBAAsBX,cAAcC,OAG/C,SAASY,uBACL,OAAOF,sBAAsBX,cAAcE,cAG/C,SAASY,gCACL,OAAOH,sBAAsBX,cAAcK,uBAG/C,SAASU,oBACL,OAAOJ,sBAAsBX,cAAcG,WAM/C,SAASa,WACL,OAAOJ,gBAGX,SAASK,qBACL,OAAON,sBAAsBX,cAAcI,YAG/C,SAASc,eAAe1rC,MACpBxB,KAAKyqC,SAAS9lC,WAAWqnC,cAAcC,OACvCjsC,KAAKyqC,SAAS9lC,WAAWqnC,cAAcE,cACvClsC,KAAKyqC,SAAS9lC,WAAWqnC,cAAcG,WACvCnsC,KAAKyqC,SAAS9lC,WAAWqnC,cAAcI,YACvCpsC,KAAKyqC,SAAS9lC,WAAWqnC,cAAcK,uBAI3C,SAASc,mBAAmBtrC,KACxBA,IAAI89B,KAAK,OAAS3/B,KAAKotC,YAAa,MACpCvrC,IAAI6d,iBAAiB,gBAAiB,aACtC7d,IAAI8+B,gBAAkB,KACtB9+B,IAAI6d,iBAAiB,eAAgB,oBACrC7d,IAAI6d,iBAAiB,SAAU,oBAInC,SAAS2tB,qBAAqBxrC,IAAKqd,UAC/B,IAAIyD,YACAphB,OACA+rC,aAEJ,GAAIzrC,IAAI+oB,SAAW,IAAK,CAEpB,IACImhB,aAAe3nC,KAAKK,MAAM5C,IAAIqpB,cAE9B,GAAI6gB,aAAaQ,aAAc,CAC3BD,eAAeP,cAGfxqC,OAASlC,SAASC,KAAK2c,QAAQuhB,YAC5B,CACHj8B,OAASlC,SAASC,KAAK2c,QAAQkhB,gBAG/Bxa,YAAc,IAAItiB,MAAMhB,SAASC,KAAK4D,YAClC,aACA,yBACA,UACA7D,SAASC,KAAK4D,YAAY,iBAGpC,MAAOwlC,IACLnnC,OAASlC,SAASC,KAAK2c,QAAQkhB,gBAG/Bxa,YAAc,IAAItiB,MAAMhB,SAASC,KAAK4D,YAClC,aACA,yBACA,UACAwlC,GAAGplC,gBAGR,GAAIzB,IAAI+oB,SAAW,IAAK,CAC3B5qB,KAAKkqC,SACL3oC,OAASlC,SAASC,KAAK2c,QAAQiqB,2BAC5B,CACH3kC,OAASlC,SAASC,KAAK2c,QAAQkhB,gBAGnCn9B,KAAKiqC,eAAe/qB,SAAU3d,QAASM,IAAOA,IAC1C8gB,YAAeA,cAIvB/iB,KAAK++B,oBAAsB,SAAU98B,IAAKqd,UACtC,IAAIyD,YACAphB,OACA+rC,aAEJ,GAAIzrC,IAAI+oB,SAAW,IAAK,CAIpBhrB,KAAKkqC,UAAY,KAGjB,IACIiC,aAAe3nC,KAAKK,MAAM5C,IAAIqpB,cAE9B,GAAI6gB,aAAaQ,aAAc,CAC3BD,eAAeP,cAGfxqC,OAASlC,SAASC,KAAK2c,QAAQuhB,YAC5B,CACHj8B,OAASlC,SAASC,KAAK2c,QAAQkhB,gBAG/Bxa,YAAc,IAAItiB,MAAMhB,SAASC,KAAK4D,YAClC,aACA,yBACA,QACA7D,SAASC,KAAK4D,YAAY,iBAGpC,MAAOwlC,IACLnnC,OAASlC,SAASC,KAAK2c,QAAQkhB,gBAG/Bxa,YAAc,IAAItiB,MAAMhB,SAASC,KAAK4D,YAClC,aACA,yBACA,QACAwlC,GAAGplC,UAKX,GAAI/B,SAAWlC,SAASC,KAAK2c,QAAQuhB,QAAS,CAE1C,IAAI3B,SAAW,SAAUtnB,QACrBA,OAASlV,SAASE,KAAKI,SAASuC,eAAeqS,QAC/CA,OAAOq0B,SAASqB,eAAe/qB,SAAU3d,QAASM,IAAOA,IACrD8gB,YAAeA,eAGvB/iB,KAAK4gC,SACAiH,KAAK5L,SAAUA,UACpB,aAID,GAAIh6B,IAAI+oB,SAAW,IAAK,CAC3BrpB,OAASlC,SAASC,KAAK2c,QAAQiqB,2BAC5B,CACH3kC,OAASlC,SAASC,KAAK2c,QAAQkhB,gBAGnCv9B,KAAKqqC,eAAe/qB,SAAU3d,QAASM,IAAOA,OAMlDjC,KAAKsqC,OAAS,WACV7qC,SAASC,KAAKqqC,0BAA0B7pC,UAAUoqC,OAAOtpC,MAAMhB,MAC/DstC,iBACAnB,aAAe,MAQnBnsC,KAAK48B,yBAA2B,SAAU36B,IACtCuyB,KACAc,IACAjW,MACA4c,UACA,IAAI77B,KAAOJ,KACP4I,KACAma,YAEJ,SAAS4qB,kBAAkB3E,SAAUrnC,OAAQC,MAGzC,GAAID,SAAWlC,SAASC,KAAK2c,QAAQiqB,uBAAwB,CACzDrK,SAAS,IAAIx7B,MAAMhB,SAASC,KAAK4D,YAAY,oBAC1C,CAGH7D,SAASC,KAAKqqC,0BAA0B7pC,UAAU08B,yBAAyB57B,MACvEZ,MACC6B,IAAKuyB,KAAMc,IAAKjW,MAAO,SAAU0D,aAC9B,GAAIA,uBAAuBtiB,MAAO,CAC9Bw7B,SAASlZ,iBACN,CACH9gB,IAAI6d,iBAAiB,gBAAiB,QAAUstB,YAChDnR,SAASh6B,UAO7B,GAAIjC,KAAK0lC,uBAAwB,CAK7B98B,KAAO,IAAIsB,KACX,GAAIlK,KAAK4tC,uBACL5tC,KAAKuqC,mBACL3hC,KAAKW,UAAY2jC,gCAAiC,CAClD,IACI,IAAIjR,SAAW,SAAUtnB,OAAQhT,OAAQC,MACrC+S,OAASlV,SAASE,KAAKI,SAASuC,eAAeqS,OAAQhT,OAAQC,MAC/D+rC,kBAAkBh5B,OAAOq0B,SAAUr0B,OAAOhT,OAAQgT,OAAO/S,OAG7D5B,KAAK6tC,UACAhG,KAAK5L,SAAUA,UACtB,MAAOp9B,GACLo9B,SAASp9B,QAEV,CACH8uC,kBAAkB3tC,KAAMP,SAASC,KAAK2c,QAAQuhB,QAAS,WAExD,CAGH7a,YAAc,IAAItiB,MAAMhB,SAASC,KAAK4D,YAAY,aAAc,2BAChE24B,SAASlZ,eAQjB/iB,KAAK0lC,qBAAuB,WACxB,OAAQsH,kBAAoB,KAAO,MAAQ,MAI/ChtC,KAAK6tC,QAAU,WACX,IAAIvuB,SAAW,IAAI7f,SAASE,KAAKI,SAC7BkC,IAEJ,IACI,IAAKjC,KAAKkqC,UAAW,CAEjB,MAAM,IAAIzpC,MAAMhB,SAASC,KAAK4D,YAAY,aAAc,yBAA0B,YAGtF,IAAKtD,KAAKuqC,kBAAmB,CAGzB,MAAM,IAAI9pC,MAAMhB,SAASC,KAAK4D,YAAY,aAAc,2BAG5DrB,IAAM,IAAItD,eACV4uC,mBAAmBtrC,KAEnBA,IAAIoe,mBAAqB,WACrB,GAAIpe,IAAIqqB,aAAe,EAAG,CAEtBmhB,qBAAqBxrC,IAAKqd,YAIlCrd,IAAI8d,KAAK,kBAAoBotB,oBAAsB,sBAC3CF,uBAAyB,MACnC,MAAOluC,OACL,GAAIU,SAASE,KAAKI,SAASM,kBAAmB,CAC1C,MAAMtB,UACH,CACHugB,SAAS1e,OAAOZ,KAAMP,SAASC,KAAK2c,QAAQkhB,iBACxCxa,YAAahkB,SAIzB,OAAOugB,SAASnf,WAIpBH,KAAKuqC,gBAAkB,WACnB,OAAQ0C,yBAA2B,KAAO,MAAQ,MAKtDjtC,KAAK0pC,YAAYpU,IACb71B,SAASC,KAAK2c,QAAQisB,oBACrBqB,UAAalqC,SAASC,KAAKoC,uBAAuBgsC,6BAC/ClC,WAAcnsC,SAASC,KAAKoC,uBAAuB+pC,qBACnD2B,YAAe/tC,SAASC,KAAKoC,uBAAuBisC,iCAM5D9B,uBAAyB,KACzBvkC,OAAOmS,eAAe7Z,KAAM,yBAEpB+Z,IAAK,WACD,OAAOkyB,wBAEXjyB,IAAK,SAAUvU,OACX,GAAIA,QAAU,MAAQA,QAAU,MAAO,CACnCwmC,uBAAyBxmC,UACtB,CACH,MAAM,IAAIhF,MAAMhB,SAASC,KAAK4D,YAAY,aACtC,yBACA,4BAGZ2W,WAAY,OAIpBja,KAAK2qC,UAAUiD,sBAAwB5tC,KAAK42B,YAAc,yBAE1DsV,KAAOlsC,KAAK+qC,kBAAkB/qC,KAAK2qC,UAAUiD,uBAC7C,GAAI1B,OAAS,MAAO,CAChBD,uBAAyB,MAK7BG,cAAcC,MAAQrsC,KAAK42B,YAAcwV,cAAcC,MACvDD,cAAcE,aAAetsC,KAAK42B,YAAcwV,cAAcE,aAC9DF,cAAcG,UAAYvsC,KAAK42B,YAAcwV,cAAcG,UAC3DH,cAAcI,WAAaxsC,KAAK42B,YAAcwV,cAAcI,WAC5DJ,cAAcK,sBAAwBzsC,KAAK42B,YAAcwV,cAAcK,sBAMvE,GAAIO,gBAAiB,CACjBhtC,KAAKkqC,UAAY,OAUzB,SAAS8D,YACTA,SAAS9tC,UAAYT,SAASC,KAAKoqC,2BAA2B5pC,UAC9DT,SAASC,KAAKqqC,0BAA0B7pC,UACpC,IAAI8tC,SAKRvuC,SAASC,KAAKqqC,0BAA0B7pC,UAAU+tB,YAC9CxuB,SAASC,KAAKqqC,0BAIlBrnC,GAAKjD,SAASC,KAAKqqC,0BAA0B7pC,UAAUkqC,WACvD3qC,SAASC,KAAKqqC,0BAA0B7pC,UAAUkqC,WAC9C,WACI3qC,SAASC,KAAKqqC,0BAA0B7pC,UAAUkqC,WAAWhuB,OAAOpb,MAAMhB,MAC1EA,KAAK6qC,SAAStmC,QAAQvE,KAAK2qC,UAAUiD,sBACjCppC,KAAKC,UAAUzE,KAAKisC,0BAEhCxsC,SAASC,KAAKqqC,0BAA0B7pC,UAAUkqC,WAAWhuB,OAAS1Z,GAEtEA,GAAKjD,SAASC,KAAKqqC,0BAA0B7pC,UAAUgrC,WACvDzrC,SAASC,KAAKqqC,0BAA0B7pC,UAAUgrC,WAC9C,WACIzrC,SAASC,KAAKqqC,0BAA0B7pC,UAAUgrC,WAAW9uB,OAAOpb,MAAMhB,MAC1EA,KAAK6qC,SAAS9lC,WAAW/E,KAAK2qC,UAAUiD,wBAEhDnuC,SAASC,KAAKqqC,0BAA0B7pC,UAAUgrC,WAAW9uB,OAAS1Z,IArc1E"} \ No newline at end of file +{"version":3,"sources":["progress.jsdo.js"],"names":["isNativeScript","isNodeJS","pkg_xmlhttprequest","pkg_nativescriptLocalstorage","pkg_fileSystemAccess","LocalStorageEmulation","this","_data","prototype","setItem","id","val","String","getItem","hasOwnProperty","undefined","removeItem","clear","XMLHttpRequest","require","e","console","error","localStorage","sessionStorage","exception1","exception2","btoa","str","Buffer","from","toString","exception3","btoaOriginal","unescape","encodeURIComponent","progress","data","util","STRING_OBJECT_TYPE","DATE_OBJECT_TYPE","CHARACTER_ABL_TYPE","Deferred","_deferred","promise","that","useJQueryPromises","$","_jQuerydeferred","_promise","Error","Promise","resolve","reject","_resolveArguments","_rejectArguments","setTimeout","apply","arg1","arg2","arg3","arguments","object","getParamObject1","when","deferreds","all","objectName","result","info","JSDOSession","AuthenticationProvider","JSDO","success","xhr","request","batch","info2","log","getParamObject","Observable","_filterObservers","observers","fn","scope","operation","filter","el","validateSubscribe","args","evt","listenerData","length","subscribe","_getMsgText","_events","toLowerCase","message","push","unsubscribe","trigger","op","Array","slice","call","forEach","unsubscribeAll","LocalStorage","saveToLocalStorage","name","dataObj","JSON","stringify","readFromLocalStorage","jsonStr","parse","clearLocalStorage","_convertToABLWhereString","tableRef","logic","idx","field","fieldInfo","type","format","operator","value","ablType","filters","whereOperators","eq","neq","gt","gte","lt","lte","contains","doesnotcontain","endswith","startswith","isnull","isnotnull","isempty","isnotempty","_name","_jsdo","_fields","origName","_getObjectType","replace","_getABLType","_format","join","_convertToSQLQueryString","addSelect","fieldFormat","filterStr","usingLike","_getFormat","Object","fmt","values","formatRegExp","match","index","placeholderFormat","parseInt","_toString","substring","_formatDate","_pad","number","digits","zeros","end","date","dateFormatRegExp","minutes","sign","getDate","getMonth","getFullYear","getHours","getMinutes","getSeconds","getMilliseconds","getTime","getTimezoneOffset","toISOString","jsdoSettingsProcessor","jsdoSettings","authenticationModel","PROGRESS_JSDO_PCT_MAX_EMPTY_BLOCKS","PROGRESS_JSDO_OP_STRING","PROGRESS_JSDO_ROW_STATE_STRING","_nextid","_uidprefix","Date","now","UID_MAX_VALUE","_getNextId","uid","msg","msgs","jsdoMSG000","jsdoMSG001","jsdoMSG002","jsdoMSG003","jsdoMSG004","jsdoMSG005","jsdoMSG006","jsdoMSG007","jsdoMSG008","jsdoMSG009","jsdoMSG010","jsdoMSG011","jsdoMSG012","jsdoMSG020","jsdoMSG021","jsdoMSG022","jsdoMSG023","jsdoMSG024","jsdoMSG025","jsdoMSG026","jsdoMSG030","jsdoMSG031","jsdoMSG032","jsdoMSG033","jsdoMSG034","jsdoMSG035","jsdoMSG036","jsdoMSG037","jsdoMSG038","jsdoMSG039","jsdoMSG040","jsdoMSG041","jsdoMSG042","jsdoMSG043","jsdoMSG044","jsdoMSG045","jsdoMSG046","jsdoMSG047","jsdoMSG048","jsdoMSG049","jsdoMSG050","jsdoMSG051","jsdoMSG052","jsdoMSG053","jsdoMSG054","jsdoMSG055","jsdoMSG056","jsdoMSG057","jsdoMSG058","jsdoMSG059","jsdoMSG060","jsdoMSG061","jsdoMSG062","jsdoMSG100","jsdoMSG101","jsdoMSG110","jsdoMSG111","jsdoMSG112","jsdoMSG113","jsdoMSG114","jsdoMSG115","jsdoMSG116","jsdoMSG117","jsdoMSG118","jsdoMSG119","jsdoMSG120","jsdoMSG121","jsdoMSG122","jsdoMSG123","jsdoMSG124","jsdoMSG125","jsdoMSG126","jsdoMSG127","jsdoMSG500","jsdoMSG501","jsdoMSG502","jsdoMSG503","jsdoMSG504","jsdoMSG505","jsdoMSG506","jsdoMSG507","jsdoMSG508","jsdoMSG509","jsdoMSG510","jsdoMSG511","jsdoMSG512","jsdoMSG998","getMsgText","n","text","i","RegExp","PluginManager","_plugins","addPlugin","plugin","getPlugin","JSIndexEntry","JSTableRef","jsdo","tableName","_schema","_primaryKeys","_processed","_visited","record","_index","_tmpIndex","_hasEmptyBlocks","_beforeImage","_added","_changed","_deleted","_lastErrors","_convertForServer","_createIndex","block","idProperty","_id","_resource","_needCompaction","_compact","newDataArray","_loadBeforeImageData","jsonObject","beforeImageJsonIndex","keyFields","prodsBeforeData","_dataSetName","tmpIndex","record2","recordId","key","tmpKeyIndex","jsrecord","tmpDataIndex","tmpDeletedIndex","j","keys","_findById","_getKey","key2","_remove","copy","_copyRecord","_tableRef","_deleteProdsProperties","JSRecord","tableObject","beforeRecord","prodsErrors","item","_errorString","_clearData","_setRecord","hasData","_nestChildren","_getDataWithNestedChildren","_getRelatedData","getData","params","_getData","numEmptyBlocks","sort","top","sortFields","dir","sortObject","_processSortFields","_getCompareFn","skip","splice","_recToDataObject","includeChildren","array","dataObject","_children","_buffers","_dataProperty","_recFromDataObject","getSchema","setSchema","schema","fieldName","add","_add","create","trackChanges","setWorkingRecord","prefixElement","maxItems","_getDefaultValue","_getArrayField","items","_convertType","useRelationships","_relationship","_parent","childFieldName","parentFieldName","v","autoSort","_sortRecords","_sortFn","_sortObject","_needsAutoSorting","_sort","ret","_compareFields","parentRecord","childBuf","_isNested","k","childRecord","m","_hasNestedChild","_findFirst","ignoreRelationships","childTable","_defaultTableRef","assign","update","remove","bTrackChanges","getId","getErrors","getErrorString","findById","find","foreach","_inforeach","_equalRecord","rec1","rec2","value1","value2","caseSensitive","toUpperCase","keyObject","jsrec1","jsrec2","sortAscending","defineProperty","_autoSort","get","set","enumerable","writeable","_caseSensitive","fields","indexOf","sortOrder","setSortFields","setSortFn","addRecords","addMode","isInvoke","_addRecords","acceptChanges","rejectChanges","_undoCreate","_undoUpdate","_undoDelete","hasChanges","getChanges","rowState","_OP_CREATE","_OP_UPDATE","_OP_DELETE","_clearErrorStrings","_applyChanges","_rejected","acceptRowChanges","found","rejectRowChanges","hasNestedChild","childBufObj","_saveBeforeImageUpdate","_sortRecord","resNameOrParmObj","serviceName","_super","Session","_defineProperty","fnGet","element","ARRAY_INDEX_SEPARATOR","isNaN","_hasSubmitOperation","_hasCUDOperations","_numBuffers","_async","operations","_session","_useSubmit","autoApplyChanges","_localStorage","_fillMergeMode","autoFill","eventName","prop","ServicesManager","getResource","url","dataProperty","buffer","properties","fnName","generic","myservice","getService","service","_pushJSDOs","buf","_properties","primaryKeys","trim","$ref","relations","relationship","childName","parentName","relationFields","defaultValue","t","d","isDate","arrayFieldName","isDataSet","_invokeComplete","async","deferred","_invokeSuccess","_invokeError","_httpRequest","method","reqBody","afterOpenRequest","input","setRequestHeader","send","exception","_checkServiceResponse","onCompleteFn","onSuccessFn","onErrorFn","onreadystatechange","onReadyStateChangeGeneric","useRequest","settings","_openRequest","_getDataObject","oldUseRelationships","_getDataObjectAsNested","bufObj","_unnestData","obj","itemType","elements","split","convertItem","parseFloat","_clearErrors","clearErrorString","_setAllRecordsRejected","param","changes","hasErrors","hasRejected","hasCommittedRecords","_allRecordsRejected","_someRecordsRejected","fill","objParam","mapping","getMethodProperties","mappingType","mergeMode","MODE_APPEND","MODE_EMPTY","MODE_MERGE","MODE_REPLACE","requestMapping","capabilities","_fillSuccess","_fillError","_fillComplete","read","errorObject","_execGenericOperation","_convertRequestData","operationStr","_OP_READ","_OP_SUBMIT","_initConvertForServer","_convertFieldsForServer","_ablTypeNeedsConversion","beforeData","_convertTableData","tableData","_convertRowData","_convertField","resultArray","_convertDate","needsConversion","_undefWorkingRecord","saveChanges","useSubmit","_checkThatJSDOHasRequiredOperations","_syncDataSetForSubmit","_syncDataSetForCUD","_syncSingleTable","checkedDelete","checkedCreate","checkedUpdate","_confirmOperationExists","invoke","_syncTableRef","rowData","requestData","dataSetObject","_useBeforeImage","_createComplete","_createSuccess","_createError","useBeforeImageFormat","beforeObject","beforeRowData","sendOnlyChanges","_updateComplete","_updateSuccess","_updateError","childTableName","_deleteComplete","_deleteSuccess","_deleteError","opType","useBeforeImage","_isBatchComplete","_isBatchSuccess","_updateLastErrors","_fireAfterSaveChanges","fireAfterSaveChanges","addedRecords","complete","completeFn","_saveChangesComplete","successFn","_saveChangesSuccess","errorFn","_saveChangesError","jsrecords","_createChangeSet","_createTTChangeSet","_saveChangesSuccessTT","dataSetName","alwaysCreateTable","changeSetJsonObject","dataSetJsonObject","_hasChanges","_addDeletesToChangeSet","_addCreatesToChangeSet","_addChangesToChangeSet","tempTableJsonObject","_addRowToTTChangeSet","event","_createDataAndChangeSet","_addRecordsToObject","_doesRecordHaveCreateBIData","_addCreatedRowToChangeSet","_doesRecordHaveUpdateBIData","_addChangedRowToChangeSet","changedId","hasUpdates","_addDeletedRowToChangeSet","beforeTableJsonObject","_getTableInBeforeJsonObject","source","target","onlyChangesRecord","newObject","deleteRowState","beforeImageJsonObject","dataHasBeenProcessed","checkBeforeImage","isAfterSame","_sameData","isBeforeSame","_getBeforeRecordFromObject","afterRecord","tablename","record1","_mergeRead","datasetBuffer","srcData","_mergeUpdateRecord","_setErrorString","errorString","setInBeforeTable","_arrayFromDataObject","_mergeUpdateForCUD","hasError","tableJsonObject","prods_id","_getErrorStringFromJsonObject","_checkForDeleteError","beforeJsonObject","_mergeUpdateForSubmit","_fireCUDTriggersForSubmit","errorsJsonObject","response","responseMapping","entry","deleteProdsProps","_checkSaveComplete","records","status","_getErrorsFromRequest","errors","errorArray","retValString","responseObject","responseText","_retVal","RETVAL","_errors","_errorNum","_errorMsg","APP_ERROR","errorNum","ERROR","statusText","errorText","DATA_ERROR","_mergeInvoke","dataParameterName","_tempTableName","xType","readyState","_saveClientContextId","concat","setProperties","propertiesObject","setProperty","propertyName","propertyValue","getProperties","getProperty","saveLocal","dataMode","callee","ALL_DATA","CHANGES_ONLY","_prepareDataObjectForLocalStorage","readLocal","_hasMatchingSchema","_restoreFromLocalStorage","addLocalRecords","_containsPrimaryKeys","storageObject","isValid","deleteLocal","option","_restoreDataForTable","_operations","constructor","radix","sortDir","ablFilter","sqlQuery","methodProperties","position","capabilitiesObject","reqCapabilities","options","doConversion","viewTables","orderBy","ui","UITableRef","_listview","_detailPage","_listviewContent","addItem","detailForm","clearItems","itemTemplate","UIHelper","_itemTemplate","listviewElement","document","getElementById","innerHTML","_getFormFieldValue","detailPageName","_setFormField","display","pageName","showListView","uiTableRef","html","attr","filterable","listview","autoLink","each","bind","getListViewRecord","onSelect","childElementCount","children","onclick","getFormFields","tmpFields","htmltext","charAt","fieldLabel","title","fieldTemplate","_fieldTemplate","htmlIElement","getAttribute","getFormRecord","_getIdOfElement","setDetailPage","setListView","pos","_defaultUITableRef","_uiTableRef","cnt","_defaultItemTemplate","_defaultFieldTemplate","setItemTemplate","template","setFieldTemplate","_services","_resources","_sessions","_jsdosessions","addResource","resource","addService","addSession","catalogURI","session","addJSDOSession","jsdosession","getSession","cleanSession","servicesKey","resourcesKey","sessionsKey","services","resources","sessions","jsdosessions","extractParamsFromURL","urlParams","paramName","c","addCatalog","baseAddress","address","path","primaryKey","tableProperties","RelationName","opname","verb","func","definition","Boolean","reqParam","unwrapped","paramsFromURL","printDebugInfo","resourceName","cSchema","cOperations","MobileServiceObject","_uri","uri","ContextProperties","contextObject","contextString","header","setContextProperty","setContext","context","getContext","getContextProperty","defPropSupported","isUserAgentiOS","isFirefox","isEdge","isIE","canPassCredentialsToOpenWithCORS","defaultiOSBasicAuthTimeout","deviceIsOnline","restApplicationIsOnline","oepingAvailable","hasResolvedPingURI","defaultPartialPingURI","classicPartialPingURI","partialPingURI","_storageKey","_authProvider","customCredentials","storedAuthModel","storedURI","newURI","stateWasReadFromStorage","_silent","warn","navigator","userAgent","canPassCredentialsToOpen","_onlineHandler","setDeviceIsOnline","_offlineHandler","DEVICE_OFFLINE","window","addEventListener","_catalogURIs","_jsdos","onOpenRequest","_password","_userName","_loginTarget","_serviceURI","_loginResult","_loginHttpStatus","_clientContextId","_authenticationModel","AUTH_TYPE_ANON","newval","AUTH_TYPE_FORM","AUTH_TYPE_BASIC","AUTH_TYPE_SSO","AUTH_TYPE_BEARER","storeSessionInfo","_lastSessionXHR","loginResult","LOGIN_SUCCESS","_pingInterval","_timeoutID","_autoping","clearTimeout","_contextProperties","isInvalidated","setAuthProvider","userName","loginTarget","serviceURI","catalogURIs","loginHttpStatus","clientContextId","lastSessionXHR","infoName","retrieveSessionInfo","clearSessionInfo","storeAllSessionInfo","pingInterval","clearAllSessionInfo","setSessionInfoFromStorage","authproviderInitObject","setLoginResult","setUserName","setServiceURI","setLoginHttpStatus","setClientContextID","setRestApplicationIsOnline","setOepingAvailable","setPartialPingURI","newname","sessionObject","setLoginTarget","pushCatalogURIs","pushService","serviceObject","findService","setClientContextIDfromXHR","getResponseHeaderNoError","ccid","setLastSessionXHR","headerName","allHeaders","_pdsResponseHeaders","regExp","getAllResponseHeaders","getResponseHeader","callback","urlPlusCCID","afterOpenAndAuthorize","arg","setRequestHeaderFromContextProps","formPreTest","_isInvalidated","_prependAppURL","_addCCIDtoURL","_useTimeStamp","_addTimeStampToURL","_openRequestAndAuthorize","_setXHRCredentials","_addWithCredentialsAndAccept","pingTestCallback","cbArgs","foundOeping","pingResult","_onReadyStateChangeGeneric","_requestTimeout","onResponseFn","onResponseProcessedFn","GENERAL_FAILURE","pdsession","_disconnect","_processDisconnectResult","_reinitializeAfterLogout","SUCCESS","_disconnectComplete","errObj","pwSave","unameSave","login","loginUserName","loginPassword","uname","pw","isAsync","iOSBasicAuthTimeout","uriForRequest","password","restURLtemp","LOGIN_GENERAL_FAILURE","_setNoCacheHeaders","_isAsync","_afterFormPretestLogin","_processLoginResult","_loginComplete","_iosTimeOutExpired","abort","_jsdosession","isFormPreTest","ASYNC_PENDING","formLoginParams","theSession","doFormLogin","oldXHR","contentType","needAuth","statusFromjson","handleJSONLoginResponse","_gotLoginForm","open","cbparams","_afterFormLogin","_gotLoginFailure","pingTestArgs","pingURI","fireEventIfOfflineChange","onReadyStateFn","_pingtestOnReadyStateChange","_makePingURI","_sendPing","LOGIN_AUTHENTICATION_FAILURE","updateContextPropsFromResponse","logout","_processLogoutResult","_logoutComplete","withCredentials","_anonymousLogoutOK","invalidate","cleanServicesManager","logoutSucceeded","basicStatusOK","arg4","catalogUserName","catalogPassword","catalogIndex","authProvider","addCatalogAfterOpen","_processAddCatalogResult","_addCatalogComplete","_catalogIndex","offlineAddCatalog","_catalogURI","CATALOG_ALREADY_LOADED","_catalogHttpStatus","servicedata","serviceURL","theJSDOSession","toggleOnlineState","_parseCatalog","useXClientProps","xClientProps","_getAuthFailureReason","ping","pingArgs","_onReadyStateChangePing","offlineReason","doNotFireEvent","_processPingResult","_isOnlineStateChange","isOnline","stateChanged","wasOnline","connected","offlineObservers","offline","onlineObservers","online","localPingArgs","pingResponseJSON","appServerStatus","connectedBeforeCallback","assumeOepingFormat","usingOepingFormat","AppServerStatus","SERVER_OFFLINE","WEB_APPLICATION_OFFLINE","PingStatus","APPSERVER_OFFLINE","resolvePingURI","sendPingAfterOpen","then","auth","_make_basic_auth","urlPart1","urlPart2","jsessionidStr","catalogdata","oldURL","newURL","pat","test","acceptString","user","tok","hash","loginFormIDString","_findStringInResponseHTML","loginFailureIdentificationString","searchString","status_code","status_txt","contextHeader","hasClientCredentials","SEQ_MAX_VALUE","_tsseq","_tsprefix1","_tsprefix2","_getNextTimeStamp","seq","Math","floor","random","round","timeStamp","AUTHENTICATION_FAILURE","validateSessionSubscribe","_eventNames","_pdsession","JSDOs","settlePromise","fulfill","genericSessionEventHandler","myDeferred","onAfterAddCatalog","settleResult","EXPIRED_TOKEN","_overallCatalogResult","_results","_numCatalogsProcessed","_numCatalogs","_processedPromise","details","onAfterLogout","onPingComplete","username","callIsAuthorized","isAuthorized","disconnect","unameOrOpts","opts","numCatalogs","addResult","authProv","cbresult","LOGIN_AUTHENTICATION_REQUIRED","AUTH_TYPE_FORM_SSO","err","validateJSDOSessionSubscribe","authProviderInitObject","sessionRejectHandler","callbackRejectHandler","reason","loginHandler","ex","callLogin","provider","loginCallback","authenticationURI","authProviderAuthenticationModel","statusCode","invalidateAllSessions","invalidatePromises","exports","initObject","authModel","_checkStringArg","_initialize","_loginURI","_homeLoginURIBase","AuthenticationProviderBasic","AuthenticationProviderForm","AuthenticationProviderSSO","AuthenticationProviderBearer","_loginProto","sendParam","_loggedIn","_openLoginRequest","_storeInfo","_settlePromise","_reset","hasRefreshToken","uriParam","targetURIs","tempURI","_dataKeys","loggedIn","_storage","_retrieveLoggedIn","_retrieveInfoItem","propName","_retrieveURI","_clearInfo","argToCheck","argPosition","argName","_springLoginURIBase","make_basic_auth_header","_basic_processLoginResult","userNameParam","passwordParam","BasicProxy","bearerToken","make_Bearer_auth_header","token","_Bearer_processLoginResult","BearerProxy","_logoutURI","_springLogoutURIBase","FormProxy","_openLogoutRequest","afterSuper","_automaticTokenRefresh","temp","ssoTokenInfo","tokenDataKeys","refreshToken","tokenType","expiration","accessTokenExpiration","storeTokenInfo","access_token","refresh_token","expires_in","token_type","retrieveTokenProperty","retrieveToken","retrieveRefreshToken","retrieveAccessTokenExpiration","retrieveTokenType","getToken","retrieveExpiration","clearTokenInfo","openRefreshRequest","_refreshURI","processRefreshResult","ssoTokenJSON","afterRefreshCheck","automaticTokenRefresh","refresh","_springFormTokenLoginURIBase","_springFormTokenRefreshURIBase","SSOProxy"],"mappings":"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"} \ No newline at end of file