UNPKG

@cute-dw/core

Version:

This TypeScript library is the main part of a more powerfull package designed for the fast WEB software development. The cornerstone of the library is the **DataStore** class, which might be useful when you need a full control of the data, but do not need

323 lines 30.4 kB
export class CuteEvent { constructor( /** Event identifier */ type, /** Any useful data */ tag) { this.type = type; this.tag = tag; this._defaultPrevented = false; this._cancelable = true; this.timeStamp = Date.now(); } /** A boolean value indicating whether the event is cancelable. */ get cancelable() { return this._cancelable; } /** Indicates whether an event has already been canceled */ get defaultPrevented() { return this._defaultPrevented; } /** Stops all related default actions that are usually performed after the event dispatch has been completed*/ preventDefault() { if (this.cancelable) { this._defaultPrevented = true; } } } export class DwEvent extends CuteEvent { constructor() { super(); } } /* export class DwSignalEvent extends DwEvent { constructor() { super() } } */ export class DwButtonClickedEvent extends DwEvent { constructor( /** The number of the row the user clicked. */ row, /** A reference to the control within the DataWindow under the pointer when the user clicked. */ dwo, /** Mutable. The value returned by the action performed by the button. Default is 0 (UserDefined). */ actionCode = 0) { super(); this.row = row; this.dwo = dwo; this.actionCode = actionCode; } } export class DwClickedEvent extends DwEvent { constructor( /** DataWindow clicked row number */ row, /** DataWindow current control */ dwo, /** Source event object */ $event) { super(); this.row = row; this.dwo = dwo; this.$event = $event; } } /** * Occurs when a database error occurs in the DataWindow or DataStore. */ export class DwDbmsErrorEvent extends DwEvent { constructor( /** A database-specific error code. */ errCode, /** A database-specific error message. */ errText, /** The buffer containing the row involved in the database activity that caused the error. */ dwBuffer, /** The number of the row involved in the database activity that caused the error */ row, /** An error object returned on the Observable response stream */ reason) { super(); this.errCode = errCode; this.errText = errText; this.dwBuffer = dwBuffer; this.row = row; this.reason = reason; } } export class DwDeleteRowEvent extends DwEvent { constructor( /** DataWindow row number to delete */ row, /** Drop only flag (mutable) */ dropOnly = false) { super(); this.row = row; this.dropOnly = dropOnly; } } export class DwDoubleClickedEvent extends DwEvent { constructor( /** DataWindow clicked row number */ row, /** DataWindow current control */ dwo, /** Source event object */ $event) { super(); this.row = row; this.dwo = dwo; this.$event = $event; } } /** * Occurs for each keystroke the user types in an edit control in the DataWindow. */ export class DwEditChangedEvent extends DwEvent { constructor( /** The number of the row containing the item whose value is being changed. */ row, /** The name of the column containing the item. */ name, /** The new data the user has specified for the item. */ data) { super(); this.row = row; this.name = name; this.data = data; } } export class DwInsertRowEvent extends DwEvent { constructor( /** Number of new row */ newRow) { super(); this.newRow = newRow; } } /** * Occurs when a field in a DataWindow control has been modified and loses focus (for example, the user presses Enter, the Tab key, or * an arrow key or clicks the mouse on another field within the DataWindow). */ export class DwItemChangedEvent extends DwEvent { constructor( /** The number of the row containing the item whose value is being changed. */ row, /** The name of the column containing the item. */ name, /** The new data the user has specified for the item. */ data) { super(); this.row = row; this.name = name; this.data = data; } } /** * Occurs when a field has been modified, the field loses focus (for example, the user presses Enter, Tab, or an arrow key or * clicks the mouse on another field in the DataWindow), and the data in the field does not pass the validation rules for its column. */ export class DwItemErrorEvent extends DwEvent { constructor( /** The number of the row containing the item whose new value has failed validation */ row, /** The name of the column containing the item. */ name, /** The new data the user has specified for the item. */ data, /** * Mutable. The return code to affect the outcome of the event: ** 0 - (Default) Reject the data value and show an error message box ** 1 - Reject the data value with no message box ** 2 - Accept the data value ** 3 - Reject the data value but allow focus to change */ actionCode = 0) { super(); this.row = row; this.name = name; this.data = data; this.actionCode = actionCode; } } /** * Occurs when a field in a DataWindow control has been modified and loses focus (for example, the user presses Enter, the Tab key, or * an arrow key or clicks the mouse on another field within the DataWindow). It occurs before the change is applied to the item. * DwItemChangingEvent can also occur when the AcceptText or Update method is called for a DataWindow control or DataStore object. */ export class DwItemChangingEvent extends DwEvent { constructor( /** The number of the row containing the item whose value is being changed. */ row, /** The name of the column containing the item. */ name, /** The new data the user has specified for the item. */ data, /** Allow focus to change when resultCode property has a prevented code (mutable) */ changeFocusOnReject = false) { super(); this.row = row; this.name = name; this.data = data; this.changeFocusOnReject = changeFocusOnReject; } } /** * Occurs when the current item in the control changes. */ export class DwItemFocusChangedEvent extends DwEvent { constructor( /** DataWindow current/active row number */ row, /** The name of the column containing the item. */ name) { super(); this.row = row; this.name = name; } } /** * Occurs when the user presses Enter or double-clicks the mouse within DataWindow */ export class DwProcessEnterEvent extends DwEvent { constructor( /** DataWindow current/active row number */ row, /** DataWindow current control */ dwo, /** Source event object */ $event) { super(); this.row = row; this.dwo = dwo; this.$event = $event; } } /** * Occurs when the retrieval for the DataWindow or DataStore is complete */ export class DwRetrieveEndEvent extends DwEvent { constructor( /** The number of rows that were retrieved. */ rowCount) { super(); this.rowCount = rowCount; } } /** * Occurs when the retrieval for the DataWindow or DataStore is about to begin. */ export class DwRetrieveStartEvent extends DwEvent { constructor( /** Modified. Do not reset the rows and buffers before retrieving data */ clearBuffers = true) { super(); this.clearBuffers = clearBuffers; } } /** * Occurs when something changed in the row object */ export class DwRowChangedEvent extends DwEvent { constructor( /** Changed row number */ row) { super(); this.row = row; } } /** * Occurs when the current row changes in the DataWindow. * @see {@link DwRowFocusChangingEvent} */ export class DwRowFocusChangedEvent extends DwEvent { constructor( /** The number of the row that has just become current. */ newRow) { super(); this.newRow = newRow; } } /** * Occurs when the current row is about to change in the DataWindow. * @see {@link DwRowFocusChangedEvent} */ export class DwRowFocusChangingEvent extends DwEvent { constructor( /** The number of the row that is current (before the row is deleted or its number changes). If the DataWindow object is empty, CurrentRow is -1 to indicate there is no current row. */ currentRow, /**The number of the row that is about to become current. If the new row is going to be an inserted row, NewRow is -1 to indicate that it does not yet exist. */ newRow) { super(); this.currentRow = currentRow; this.newRow = newRow; } } /** * Occurs after a script calls the Update method and just before changes in the DataWindow or DataStore are sent to the database. */ export class DwUpdateStartEvent extends DwEvent { constructor() { super(); } } /** * Occurs when all the updates to the database from the DataWindow (or DataStore) are complete. */ export class DwUpdateEndEvent extends DwEvent { constructor( /** The number of rows inserted. */ rowsInserted, /** The number of rows updated. */ rowsUpdated, /** The number of rows deleted. */ rowsDeleted) { super(); this.rowsInserted = rowsInserted; this.rowsUpdated = rowsUpdated; this.rowsDeleted = rowsDeleted; } } /** * Occurs when visible columns list has been changed */ export class DwColumnsChangeEvent extends DwEvent { constructor( /** The array of new visible columns */ columnNames) { super(); this.columnNames = columnNames; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3V0ZS1jb3JlL3NyYy9saWIvZGF0YXN0b3JlL2V2ZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxNQUFNLE9BQU8sU0FBUztJQUlwQjtJQUNFLHVCQUF1QjtJQUNQLElBQWE7SUFDN0Isc0JBQXNCO0lBQ2YsR0FBUztRQUZBLFNBQUksR0FBSixJQUFJLENBQVM7UUFFdEIsUUFBRyxHQUFILEdBQUcsQ0FBTTtRQVBSLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUNuQyxnQkFBVyxHQUFZLElBQUksQ0FBQztRQUN0QixjQUFTLEdBQVcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBTzNDLENBQUM7SUFFTCxrRUFBa0U7SUFDbEUsSUFBSSxVQUFVLEtBQWEsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFBLENBQUEsQ0FBQztJQUVuRCwyREFBMkQ7SUFDM0QsSUFBSSxnQkFBZ0IsS0FBYSxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBLENBQUM7SUFFaEUsOEdBQThHO0lBQzlHLGNBQWMsS0FBVyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7UUFBQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO0tBQUMsQ0FBQyxDQUFDO0NBRWpGO0FBRUQsTUFBTSxPQUFPLE9BQVEsU0FBUSxTQUFTO0lBQ3BDLGdCQUFnQixLQUFLLEVBQUUsQ0FBQSxDQUFDLENBQUM7Q0FDMUI7QUFDRDs7OztFQUlFO0FBQ0YsTUFBTSxPQUFPLG9CQUFxQixTQUFRLE9BQU87SUFDL0M7SUFFRSwrQ0FBK0M7SUFDL0IsR0FBVztJQUMzQixpR0FBaUc7SUFDakYsR0FBYTtJQUM3QixxR0FBcUc7SUFDOUYsYUFBcUIsQ0FBQztRQUUzQixLQUFLLEVBQUUsQ0FBQTtRQU5PLFFBQUcsR0FBSCxHQUFHLENBQVE7UUFFWCxRQUFHLEdBQUgsR0FBRyxDQUFV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QVcsQ0FBUTtRQUVuQixnQkFBVyxHQUFYLFdBQVcsQ0FBUTtJQUV6QixDQUFDO0NBQ2Q7QUFDRDs7R0FFRztBQUNILE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxPQUFPO0lBQy9DO0lBRUUsdUNBQXVDO0lBQ3ZCLFdBQXFCO1FBRW5DLEtBQUssRUFBRSxDQUFBO1FBRk8sZ0JBQVcsR0FBWCxXQUFXLENBQVU7SUFFM0IsQ0FBQztDQUNkIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuaW1wb3J0IHsgQnVmZmVyVHlwZSwgRHdPYmplY3QgfSBmcm9tIFwiLi9EYXRhU3RvcmVPcHRpb25zXCI7XHJcbmltcG9ydCB7IEpzb25ScGNFcnJvclJlc3BvbnNlIH0gZnJvbSBcIi4uL3V0aWwvbmV0L0pzb25ScGNcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBDdXRlRXZlbnQge1xyXG4gIHByaXZhdGUgICBfZGVmYXVsdFByZXZlbnRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByb3RlY3RlZCBfY2FuY2VsYWJsZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHVibGljIHJlYWRvbmx5IHRpbWVTdGFtcDogbnVtYmVyID0gRGF0ZS5ub3coKTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8qKiBFdmVudCBpZGVudGlmaWVyICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgdHlwZT86IHN0cmluZyxcclxuICAgIC8qKiBBbnkgdXNlZnVsIGRhdGEgKi9cclxuICAgIHB1YmxpYyB0YWc/OiBhbnlcclxuXHJcbiAgKSB7IH1cclxuXHJcbiAgLyoqIEEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGV2ZW50IGlzIGNhbmNlbGFibGUuICovXHJcbiAgZ2V0IGNhbmNlbGFibGUoKTogYm9vbGVhbiB7cmV0dXJuIHRoaXMuX2NhbmNlbGFibGV9XHJcblxyXG4gIC8qKiBJbmRpY2F0ZXMgd2hldGhlciBhbiBldmVudCBoYXMgYWxyZWFkeSBiZWVuIGNhbmNlbGVkICovXHJcbiAgZ2V0IGRlZmF1bHRQcmV2ZW50ZWQoKTogYm9vbGVhbiB7cmV0dXJuIHRoaXMuX2RlZmF1bHRQcmV2ZW50ZWQ7fVxyXG5cclxuICAvKiogU3RvcHMgYWxsIHJlbGF0ZWQgZGVmYXVsdCBhY3Rpb25zIHRoYXQgYXJlIHVzdWFsbHkgcGVyZm9ybWVkIGFmdGVyIHRoZSBldmVudCBkaXNwYXRjaCBoYXMgYmVlbiBjb21wbGV0ZWQqL1xyXG4gIHByZXZlbnREZWZhdWx0KCk6IHZvaWQgeyBpZiAodGhpcy5jYW5jZWxhYmxlKSB7dGhpcy5fZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7fSB9XHJcblxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRHdFdmVudCBleHRlbmRzIEN1dGVFdmVudCB7XHJcbiAgY29uc3RydWN0b3IoKSB7IHN1cGVyKCkgfVxyXG59XHJcbi8qXHJcbmV4cG9ydCBjbGFzcyBEd1NpZ25hbEV2ZW50IGV4dGVuZHMgRHdFdmVudCB7XHJcbiAgY29uc3RydWN0b3IoKSB7IHN1cGVyKCkgfVxyXG59XHJcbiovXHJcbmV4cG9ydCBjbGFzcyBEd0J1dHRvbkNsaWNrZWRFdmVudCBleHRlbmRzIER3RXZlbnQge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG5cclxuICAgIC8qKiBUaGUgbnVtYmVyIG9mIHRoZSByb3cgdGhlIHVzZXIgY2xpY2tlZC4gICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgcm93OiBudW1iZXIsXHJcbiAgICAvKiogQSByZWZlcmVuY2UgdG8gdGhlIGNvbnRyb2wgd2l0aGluIHRoZSBEYXRhV2luZG93IHVuZGVyIHRoZSBwb2ludGVyIHdoZW4gdGhlIHVzZXIgY2xpY2tlZC4gICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgZHdvOiBEd09iamVjdCxcclxuICAgIC8qKiBNdXRhYmxlLiBUaGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGFjdGlvbiBwZXJmb3JtZWQgYnkgdGhlIGJ1dHRvbi4gRGVmYXVsdCBpcyAwIChVc2VyRGVmaW5lZCkuICovXHJcbiAgICBwdWJsaWMgYWN0aW9uQ29kZTogbnVtYmVyID0gMCxcclxuXHJcbiAgKSB7IHN1cGVyKCkgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRHdDbGlja2VkRXZlbnQgZXh0ZW5kcyBEd0V2ZW50IHtcclxuICBjb25zdHJ1Y3RvcihcclxuXHJcbiAgICAvKiogRGF0YVdpbmRvdyBjbGlja2VkIHJvdyBudW1iZXIgKi9cclxuICAgIHB1YmxpYyByZWFkb25seSByb3c6IG51bWJlcixcclxuICAgIC8qKiBEYXRhV2luZG93IGN1cnJlbnQgY29udHJvbCAqL1xyXG4gICAgcHVibGljIHJlYWRvbmx5IGR3bzogRHdPYmplY3QsXHJcbiAgICAvKiogU291cmNlIGV2ZW50IG9iamVjdCAqL1xyXG4gICAgcHVibGljIHJlYWRvbmx5ICRldmVudDogTW91c2VFdmVudFxyXG5cclxuICApIHsgc3VwZXIoKSB9XHJcbn1cclxuLyoqXHJcbiAqIE9jY3VycyB3aGVuIGEgZGF0YWJhc2UgZXJyb3Igb2NjdXJzIGluIHRoZSBEYXRhV2luZG93IG9yIERhdGFTdG9yZS5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBEd0RibXNFcnJvckV2ZW50IGV4dGVuZHMgRHdFdmVudCB7XHJcbiAgY29uc3RydWN0b3IoXHJcblxyXG4gICAgLyoqIEEgZGF0YWJhc2Utc3BlY2lmaWMgZXJyb3IgY29kZS4gKi9cclxuICAgIHB1YmxpYyByZWFkb25seSBlcnJDb2RlOiBudW1iZXIsXHJcbiAgICAvKiogQSBkYXRhYmFzZS1zcGVjaWZpYyBlcnJvciBtZXNzYWdlLiAqL1xyXG4gICAgcHVibGljIHJlYWRvbmx5IGVyclRleHQ6IHN0cmluZyxcclxuICAgIC8qKiBUaGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIHJvdyBpbnZvbHZlZCBpbiB0aGUgZGF0YWJhc2UgYWN0aXZpdHkgdGhhdCBjYXVzZWQgdGhlIGVycm9yLiAqL1xyXG4gICAgcHVibGljIHJlYWRvbmx5IGR3QnVmZmVyPzogQnVmZmVyVHlwZSxcclxuICAgIC8qKiBUaGUgbnVtYmVyIG9mIHRoZSByb3cgaW52b2x2ZWQgaW4gdGhlIGRhdGFiYXNlIGFjdGl2aXR5IHRoYXQgY2F1c2VkIHRoZSBlcnJvciAqL1xyXG4gICAgcHVibGljIHJlYWRvbmx5IHJvdz86IG51bWJlcixcclxuICAgIC8qKiBBbiBlcnJvciBvYmplY3QgcmV0dXJuZWQgb24gdGhlIE9ic2VydmFibGUgcmVzcG9uc2Ugc3RyZWFtICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgcmVhc29uPzogSHR0cEVycm9yUmVzcG9uc2UgfCBKc29uUnBjRXJyb3JSZXNwb25zZVxyXG5cclxuICApIHsgc3VwZXIoKSB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBEd0RlbGV0ZVJvd0V2ZW50IGV4dGVuZHMgRHdFdmVudCB7XHJcbiAgY29uc3RydWN0b3IoXHJcblxyXG4gICAgLyoqIERhdGFXaW5kb3cgcm93IG51bWJlciB0byBkZWxldGUgKi9cclxuICAgIHB1YmxpYyByZWFkb25seSByb3c6IG51bWJlcixcclxuICAgIC8qKiBEcm9wIG9ubHkgZmxhZyAobXV0YWJsZSkgKi9cclxuICAgIHB1YmxpYyBkcm9wT25seTogYm9vbGVhbiA9IGZhbHNlXHJcblxyXG4gICkgeyBzdXBlcigpIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIER3RG91YmxlQ2xpY2tlZEV2ZW50IGV4dGVuZHMgRHdFdmVudCB7XHJcbiAgY29uc3RydWN0b3IoXHJcblxyXG4gICAgLyoqIERhdGFXaW5kb3cgY2xpY2tlZCByb3cgbnVtYmVyICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgcm93OiBudW1iZXIsXHJcbiAgICAvKiogRGF0YVdpbmRvdyBjdXJyZW50IGNvbnRyb2wgKi9cclxuICAgIHB1YmxpYyByZWFkb25seSBkd286IER3T2JqZWN0IHwgbnVsbCxcclxuICAgIC8qKiBTb3VyY2UgZXZlbnQgb2JqZWN0ICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgJGV2ZW50OiBNb3VzZUV2ZW50XHJcblxyXG4gICkgeyBzdXBlcigpIH1cclxufVxyXG4vKipcclxuICogT2NjdXJzIGZvciBlYWNoIGtleXN0cm9rZSB0aGUgdXNlciB0eXBlcyBpbiBhbiBlZGl0IGNvbnRyb2wgaW4gdGhlIERhdGFXaW5kb3cuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRHdFZGl0Q2hhbmdlZEV2ZW50IGV4dGVuZHMgRHdFdmVudCB7XHJcbiAgY29uc3RydWN0b3IoXHJcblxyXG4gICAgLyoqIFRoZSBudW1iZXIgb2YgdGhlIHJvdyBjb250YWluaW5nIHRoZSBpdGVtIHdob3NlIHZhbHVlIGlzIGJlaW5nIGNoYW5nZWQuICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgcm93OiBudW1iZXIsXHJcbiAgICAvKiogVGhlIG5hbWUgb2YgdGhlIGNvbHVtbiBjb250YWluaW5nIHRoZSBpdGVtLiAgKi9cclxuICAgIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmcsXHJcbiAgICAvKiogVGhlIG5ldyBkYXRhIHRoZSB1c2VyIGhhcyBzcGVjaWZpZWQgZm9yIHRoZSBpdGVtLiAqL1xyXG4gICAgcHVibGljIHJlYWRvbmx5IGRhdGE6IGFueSxcclxuXHJcbiAgKSB7IHN1cGVyKCkgfVxyXG4gIH1cclxuXHJcbmV4cG9ydCBjbGFzcyBEd0luc2VydFJvd0V2ZW50IGV4dGVuZHMgRHdFdmVudCB7XHJcbiAgY29uc3RydWN0b3IoXHJcblxyXG4gICAgLyoqIE51bWJlciBvZiBuZXcgcm93ICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgbmV3Um93OiBudW1iZXJcclxuXHJcbiAgKSB7IHN1cGVyKCkgfVxyXG59XHJcbi8qKlxyXG4gKiBPY2N1cnMgd2hlbiBhIGZpZWxkIGluIGEgRGF0YVdpbmRvdyBjb250cm9sIGhhcyBiZWVuIG1vZGlmaWVkIGFuZCBsb3NlcyBmb2N1cyAoZm9yIGV4YW1wbGUsIHRoZSB1c2VyIHByZXNzZXMgRW50ZXIsIHRoZSBUYWIga2V5LCBvclxyXG4gKiBhbiBhcnJvdyBrZXkgb3IgY2xpY2tzIHRoZSBtb3VzZSBvbiBhbm90aGVyIGZpZWxkIHdpdGhpbiB0aGUgRGF0YVdpbmRvdykuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRHdJdGVtQ2hhbmdlZEV2ZW50IGV4dGVuZHMgRHdFdmVudCB7XHJcbiAgY29uc3RydWN0b3IoXHJcblxyXG4gICAgLyoqIFRoZSBudW1iZXIgb2YgdGhlIHJvdyBjb250YWluaW5nIHRoZSBpdGVtIHdob3NlIHZhbHVlIGlzIGJlaW5nIGNoYW5nZWQuICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgcm93OiBudW1iZXIsXHJcbiAgICAvKiogVGhlIG5hbWUgb2YgdGhlIGNvbHVtbiBjb250YWluaW5nIHRoZSBpdGVtLiAgKi9cclxuICAgIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmcsXHJcbiAgICAvKiogVGhlIG5ldyBkYXRhIHRoZSB1c2VyIGhhcyBzcGVjaWZpZWQgZm9yIHRoZSBpdGVtLiAqL1xyXG4gICAgcHVibGljIHJlYWRvbmx5IGRhdGE6IGFueSxcclxuXHJcbiAgKSB7c3VwZXIoKX1cclxufVxyXG4vKipcclxuICogT2NjdXJzIHdoZW4gYSBmaWVsZCBoYXMgYmVlbiBtb2RpZmllZCwgdGhlIGZpZWxkIGxvc2VzIGZvY3VzIChmb3IgZXhhbXBsZSwgdGhlIHVzZXIgcHJlc3NlcyBFbnRlciwgVGFiLCBvciBhbiBhcnJvdyBrZXkgb3JcclxuICogY2xpY2tzIHRoZSBtb3VzZSBvbiBhbm90aGVyIGZpZWxkIGluIHRoZSBEYXRhV2luZG93KSwgYW5kIHRoZSBkYXRhIGluIHRoZSBmaWVsZCBkb2VzIG5vdCBwYXNzIHRoZSB2YWxpZGF0aW9uIHJ1bGVzIGZvciBpdHMgY29sdW1uLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIER3SXRlbUVycm9yRXZlbnQgZXh0ZW5kcyBEd0V2ZW50IHtcclxuICBjb25zdHJ1Y3RvcihcclxuXHJcbiAgICAvKiogVGhlIG51bWJlciBvZiB0aGUgcm93IGNvbnRhaW5pbmcgdGhlIGl0ZW0gd2hvc2UgbmV3IHZhbHVlIGhhcyBmYWlsZWQgdmFsaWRhdGlvbiAqL1xyXG4gICAgcHVibGljIHJlYWRvbmx5IHJvdzogbnVtYmVyLFxyXG4gICAgLyoqIFRoZSBuYW1lIG9mIHRoZSBjb2x1bW4gY29udGFpbmluZyB0aGUgaXRlbS4gICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nLFxyXG4gICAgLyoqIFRoZSBuZXcgZGF0YSB0aGUgdXNlciBoYXMgc3BlY2lmaWVkIGZvciB0aGUgaXRlbS4gKi9cclxuICAgIHB1YmxpYyByZWFkb25seSBkYXRhOiBhbnksXHJcbiAgICAvKipcclxuICAgICAqIE11dGFibGUuIFRoZSByZXR1cm4gY29kZSB0byBhZmZlY3QgdGhlIG91dGNvbWUgb2YgdGhlIGV2ZW50OlxyXG4gICAgICoqIDAgLSAoRGVmYXVsdCkgUmVqZWN0IHRoZSBkYXRhIHZhbHVlIGFuZCBzaG93IGFuIGVycm9yIG1lc3NhZ2UgYm94XHJcbiAgICAgKiogMSAtIFJlamVjdCB0aGUgZGF0YSB2YWx1ZSB3aXRoIG5vIG1lc3NhZ2UgYm94XHJcbiAgICAgKiogMiAtIEFjY2VwdCB0aGUgZGF0YSB2YWx1ZVxyXG4gICAgICoqIDMgLSBSZWplY3QgdGhlIGRhdGEgdmFsdWUgYnV0IGFsbG93IGZvY3VzIHRvIGNoYW5nZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYWN0aW9uQ29kZTogMHwxfDJ8MyA9IDAsXHJcblxyXG4gICkge3N1cGVyKCl9XHJcbn1cclxuLyoqXHJcbiAqIE9jY3VycyB3aGVuIGEgZmllbGQgaW4gYSBEYXRhV2luZG93IGNvbnRyb2wgaGFzIGJlZW4gbW9kaWZpZWQgYW5kIGxvc2VzIGZvY3VzIChmb3IgZXhhbXBsZSwgdGhlIHVzZXIgcHJlc3NlcyBFbnRlciwgdGhlIFRhYiBrZXksIG9yXHJcbiAqIGFuIGFycm93IGtleSBvciBjbGlja3MgdGhlIG1vdXNlIG9uIGFub3RoZXIgZmllbGQgd2l0aGluIHRoZSBEYXRhV2luZG93KS4gSXQgb2NjdXJzIGJlZm9yZSB0aGUgY2hhbmdlIGlzIGFwcGxpZWQgdG8gdGhlIGl0ZW0uXHJcbiAqIER3SXRlbUNoYW5naW5nRXZlbnQgY2FuIGFsc28gb2NjdXIgd2hlbiB0aGUgQWNjZXB0VGV4dCBvciBVcGRhdGUgbWV0aG9kIGlzIGNhbGxlZCBmb3IgYSBEYXRhV2luZG93IGNvbnRyb2wgb3IgRGF0YVN0b3JlIG9iamVjdC5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBEd0l0ZW1DaGFuZ2luZ0V2ZW50IGV4dGVuZHMgRHdFdmVudCB7XHJcbiAgY29uc3RydWN0b3IoXHJcblxyXG4gICAgLyoqIFRoZSBudW1iZXIgb2YgdGhlIHJvdyBjb250YWluaW5nIHRoZSBpdGVtIHdob3NlIHZhbHVlIGlzIGJlaW5nIGNoYW5nZWQuICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgcm93OiBudW1iZXIsXHJcbiAgICAvKiogVGhlIG5hbWUgb2YgdGhlIGNvbHVtbiBjb250YWluaW5nIHRoZSBpdGVtLiAgKi9cclxuICAgIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmcsXHJcbiAgICAvKiogVGhlIG5ldyBkYXRhIHRoZSB1c2VyIGhhcyBzcGVjaWZpZWQgZm9yIHRoZSBpdGVtLiAqL1xyXG4gICAgcHVibGljIHJlYWRvbmx5IGRhdGE6IGFueSxcclxuICAgIC8qKiBBbGxvdyBmb2N1cyB0byBjaGFuZ2Ugd2hlbiByZXN1bHRDb2RlIHByb3BlcnR5IGhhcyBhIHByZXZlbnRlZCBjb2RlIChtdXRhYmxlKSAqL1xyXG4gICAgcHVibGljIGNoYW5nZUZvY3VzT25SZWplY3Q6IGJvb2xlYW4gPSBmYWxzZSxcclxuXHJcbiAgKSB7c3VwZXIoKX1cclxufVxyXG4vKipcclxuICogT2NjdXJzIHdoZW4gdGhlIGN1cnJlbnQgaXRlbSBpbiB0aGUgY29udHJvbCBjaGFuZ2VzLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIER3SXRlbUZvY3VzQ2hhbmdlZEV2ZW50IGV4dGVuZHMgRHdFdmVudCB7XHJcbiAgY29uc3RydWN0b3IoXHJcblxyXG4gICAgLyoqIERhdGFXaW5kb3cgY3VycmVudC9hY3RpdmUgcm93IG51bWJlciAqL1xyXG4gICAgcHVibGljIHJlYWRvbmx5IHJvdzogbnVtYmVyLFxyXG4gICAgLyoqIFRoZSBuYW1lIG9mIHRoZSBjb2x1bW4gY29udGFpbmluZyB0aGUgaXRlbS4gICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nLFxyXG5cclxuICAgICkge3N1cGVyKCl9XHJcbiAgfVxyXG4vKipcclxuICogT2NjdXJzIHdoZW4gdGhlIHVzZXIgcHJlc3NlcyBFbnRlciBvciBkb3VibGUtY2xpY2tzIHRoZSBtb3VzZSB3aXRoaW4gRGF0YVdpbmRvd1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIER3UHJvY2Vzc0VudGVyRXZlbnQgZXh0ZW5kcyBEd0V2ZW50IHtcclxuICBjb25zdHJ1Y3RvcihcclxuXHJcbiAgICAvKiogRGF0YVdpbmRvdyBjdXJyZW50L2FjdGl2ZSByb3cgbnVtYmVyICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgcm93OiBudW1iZXIsXHJcbiAgICAvKiogRGF0YVdpbmRvdyBjdXJyZW50IGNvbnRyb2wgKi9cclxuICAgIHB1YmxpYyByZWFkb25seSBkd286IER3T2JqZWN0IHwgbnVsbCxcclxuICAgIC8qKiBTb3VyY2UgZXZlbnQgb2JqZWN0ICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgJGV2ZW50PzogS2V5Ym9hcmRFdmVudCxcclxuXHJcbiAgKSB7IHN1cGVyKCkgfVxyXG59XHJcbi8qKlxyXG4gKiBPY2N1cnMgd2hlbiB0aGUgcmV0cmlldmFsIGZvciB0aGUgRGF0YVdpbmRvdyBvciBEYXRhU3RvcmUgaXMgY29tcGxldGVcclxuICovXHJcbmV4cG9ydCBjbGFzcyBEd1JldHJpZXZlRW5kRXZlbnQgZXh0ZW5kcyBEd0V2ZW50IHtcclxuICBjb25zdHJ1Y3RvcihcclxuXHJcbiAgICAvKiogVGhlIG51bWJlciBvZiByb3dzIHRoYXQgd2VyZSByZXRyaWV2ZWQuICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgcm93Q291bnQ6IG51bWJlclxyXG5cclxuICApIHsgc3VwZXIoKSB9XHJcbn1cclxuLyoqXHJcbiAqIE9jY3VycyB3aGVuIHRoZSByZXRyaWV2YWwgZm9yIHRoZSBEYXRhV2luZG93IG9yIERhdGFTdG9yZSBpcyBhYm91dCB0byBiZWdpbi5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBEd1JldHJpZXZlU3RhcnRFdmVudCBleHRlbmRzIER3RXZlbnQge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG5cclxuICAgIC8qKiBNb2RpZmllZC4gRG8gbm90IHJlc2V0IHRoZSByb3dzIGFuZCBidWZmZXJzIGJlZm9yZSByZXRyaWV2aW5nIGRhdGEgKi9cclxuICAgIHB1YmxpYyBjbGVhckJ1ZmZlcnM6IGJvb2xlYW4gPSB0cnVlXHJcblxyXG4gICkgeyBzdXBlcigpIH1cclxufVxyXG4vKipcclxuICogT2NjdXJzIHdoZW4gc29tZXRoaW5nIGNoYW5nZWQgaW4gdGhlIHJvdyBvYmplY3RcclxuICovXHJcbmV4cG9ydCBjbGFzcyBEd1Jvd0NoYW5nZWRFdmVudCBleHRlbmRzIER3RXZlbnQge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgLyoqIENoYW5nZWQgcm93IG51bWJlciAqL1xyXG4gICAgcHVibGljIHJlYWRvbmx5IHJvdzogbnVtYmVyXHJcbiAgKSB7IHN1cGVyKCkgfVxyXG59XHJcbi8qKlxyXG4gKiBPY2N1cnMgd2hlbiB0aGUgY3VycmVudCByb3cgY2hhbmdlcyBpbiB0aGUgRGF0YVdpbmRvdy5cclxuICogQHNlZSB7QGxpbmsgRHdSb3dGb2N1c0NoYW5naW5nRXZlbnR9XHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRHdSb3dGb2N1c0NoYW5nZWRFdmVudCBleHRlbmRzIER3RXZlbnQge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG5cclxuICAgIC8qKiBUaGUgbnVtYmVyIG9mIHRoZSByb3cgdGhhdCBoYXMganVzdCBiZWNvbWUgY3VycmVudC4gKi9cclxuICAgIHB1YmxpYyByZWFkb25seSBuZXdSb3c6IG51bWJlclxyXG5cclxuICApIHsgc3VwZXIoKSB9XHJcbn1cclxuLyoqXHJcbiAqIE9jY3VycyB3aGVuIHRoZSBjdXJyZW50IHJvdyBpcyBhYm91dCB0byBjaGFuZ2UgaW4gdGhlIERhdGFXaW5kb3cuXHJcbiAqIEBzZWUge0BsaW5rIER3Um93Rm9jdXNDaGFuZ2VkRXZlbnR9XHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRHdSb3dGb2N1c0NoYW5naW5nRXZlbnQgZXh0ZW5kcyBEd0V2ZW50IHtcclxuICBjb25zdHJ1Y3RvcihcclxuXHJcbiAgICAvKiogVGhlIG51bWJlciBvZiB0aGUgcm93IHRoYXQgaXMgY3VycmVudCAoYmVmb3JlIHRoZSByb3cgaXMgZGVsZXRlZCBvciBpdHMgbnVtYmVyIGNoYW5nZXMpLiBJZiB0aGUgRGF0YVdpbmRvdyBvYmplY3QgaXMgZW1wdHksIEN1cnJlbnRSb3cgaXMgLTEgdG8gaW5kaWNhdGUgdGhlcmUgaXMgbm8gY3VycmVudCByb3cuICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgY3VycmVudFJvdzogbnVtYmVyLFxyXG4gICAgLyoqVGhlIG51bWJlciBvZiB0aGUgcm93IHRoYXQgaXMgYWJvdXQgdG8gYmVjb21lIGN1cnJlbnQuIElmIHRoZSBuZXcgcm93IGlzIGdvaW5nIHRvIGJlIGFuIGluc2VydGVkIHJvdywgTmV3Um93IGlzIC0xIHRvIGluZGljYXRlIHRoYXQgaXQgZG9lcyBub3QgeWV0IGV4aXN0LiAgKi9cclxuICAgIHB1YmxpYyByZWFkb25seSBuZXdSb3c6IG51bWJlcixcclxuXHJcbiAgKSB7IHN1cGVyKCkgfVxyXG59XHJcbi8qKlxyXG4gKiBPY2N1cnMgYWZ0ZXIgYSBzY3JpcHQgY2FsbHMgdGhlIFVwZGF0ZSBtZXRob2QgYW5kIGp1c3QgYmVmb3JlIGNoYW5nZXMgaW4gdGhlIERhdGFXaW5kb3cgb3IgRGF0YVN0b3JlIGFyZSBzZW50IHRvIHRoZSBkYXRhYmFzZS5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBEd1VwZGF0ZVN0YXJ0RXZlbnQgZXh0ZW5kcyBEd0V2ZW50IHtcclxuICBjb25zdHJ1Y3RvcigpIHsgc3VwZXIoKSB9XHJcbn1cclxuLyoqXHJcbiAqIE9jY3VycyB3aGVuIGFsbCB0aGUgdXBkYXRlcyB0byB0aGUgZGF0YWJhc2UgZnJvbSB0aGUgRGF0YVdpbmRvdyAob3IgRGF0YVN0b3JlKSBhcmUgY29tcGxldGUuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRHdVcGRhdGVFbmRFdmVudCBleHRlbmRzIER3RXZlbnQge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG5cclxuICAgIC8qKiBUaGUgbnVtYmVyIG9mIHJvd3MgaW5zZXJ0ZWQuICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgcm93c0luc2VydGVkOiBudW1iZXIsXHJcbiAgICAvKiogVGhlIG51bWJlciBvZiByb3dzIHVwZGF0ZWQuICovXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgcm93c1VwZGF0ZWQ6IG51bWJlcixcclxuICAgIC8qKiBUaGUgbnVtYmVyIG9mIHJvd3MgZGVsZXRlZC4gKi9cclxuICAgIHB1YmxpYyByZWFkb25seSByb3dzRGVsZXRlZDogbnVtYmVyLFxyXG5cclxuICApIHsgc3VwZXIoKSB9XHJcbn1cclxuLyoqXHJcbiAqIE9jY3VycyB3aGVuIHZpc2libGUgY29sdW1ucyBsaXN0IGhhcyBiZWVuIGNoYW5nZWRcclxuICovXHJcbmV4cG9ydCBjbGFzcyBEd0NvbHVtbnNDaGFuZ2VFdmVudCBleHRlbmRzIER3RXZlbnQge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG5cclxuICAgIC8qKiBUaGUgYXJyYXkgb2YgbmV3IHZpc2libGUgY29sdW1ucyAqL1xyXG4gICAgcHVibGljIHJlYWRvbmx5IGNvbHVtbk5hbWVzOiBzdHJpbmdbXSxcclxuXHJcbiAgKSB7IHN1cGVyKCkgfVxyXG59XHJcbiJdfQ==