@cabinfo.eu/astrophysics-library
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 7.2.0.
971 lines • 58.9 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/**
* This class define physics constants and calculated physics constants.
*
* Instanciation example :
*
* ```typescript
* const instance = new CPhysicsConstants();
* ```
*
* @remarks
* This method is part of the {@link core-library#Statistics | Statistics subsystem}.
*
* @author Alain Deseine
*
* @copyright CEI Alain Deseine 1992-2019
*
* @beta
*
* Copyright (C) 2019 Alain Deseine
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
*/
var CConstant = /** @class */ (function () {
/**
* Constructor.
*
* The constructor of this class calculate calculated physics constants.
*
* @remarks
* This method is part of the {@link core-library#Statistics | Statistics subsystem}.
*
* @beta
*/
function CConstant(name, symbol, value, unit, description) {
// Set physics constants
this.name = name;
this.symbol = symbol;
this.value = value;
this.unit = unit;
this.description = description;
} // eo constructor
return CConstant;
}()); // eo CConstant class
export { CConstant };
if (false) {
/** @type {?} */
CConstant.prototype.name;
/** @type {?} */
CConstant.prototype.symbol;
/** @type {?} */
CConstant.prototype.value;
/** @type {?} */
CConstant.prototype.unit;
/** @type {?} */
CConstant.prototype.description;
}
// eo CConstant class
var
// eo CConstant class
CPhysicsConstants = /** @class */ (function () {
/**
* Constructor.
*
* The constructor of this class calculate calculated physics constants.
*
* @remarks
* This method is part of the {@link core-library#Statistics | Statistics subsystem}.
*
* @beta
*/
function CPhysicsConstants() {
var _this = this;
this.constants = [];
// Set physics constants
this.constants.push(new CConstant('PI constant', 'π', Math.PI, 'None', ''));
this.constants.push(new CConstant('Celerity', 'c', 299792458, 'm.s-1', 'Celerity of light in vaccum'));
this.constants.push(new CConstant('Planck constant', 'h', 6.62607015e-34, 'J.s', 'The Planck constant is a physical constant that is the quantum of electromagnetic action, which relates the energy carried by a photon to its frequency'));
this.constants.push(new CConstant('Boltzmann constant', 'k', 1.38064852e-23, 'J.K-1', 'The Boltzmann constant (kB or k) is a physical constant which relates the average relative kinetic energy of particles in a gas with the temperature of the gas and occurs in Planck\'s law of black-body radiation and in Boltzmann\'s entropy formula.'));
this.constants.push(new CConstant('Gravitational constant', 'G', 6.67408e-11, 'N.m2.kg-2', 'Gravitational constant is an empirical physical constant involved in the calculation of gravitational effects in Isaac Newton\'s law of universal gravitation and in Albert Einstein\'s general theory of relativity.')); // TODO Alain : Vérifier unité
this.constants.push(new CConstant('Elementary charge', 'e', 1.602176634e-19, 'A.s', ''));
this.constants.push(new CConstant('Coulomb', 'C', 1, 'A.s', ''));
this.constants.push(new CConstant('Avogadro constant', 'NA', 6.022140857, 'mol-1', ''));
this.constants.push(new CConstant('Standard acceleration', 'g', 9.80665, 'm.s-2', 'Standard acceleration due to gravity on earth'));
this.constants.push(new CConstant('Bohr radius', 'a0', 0.52917721092, 'Å', 'The Bohr radius is approximately equal to the most probable distance between the nucleus and the electron in a hydrogen atom in its ground state. '));
this.constants.push(new CConstant('Ideal gas constant', 'R', 8.3144598, 'J.K-1.mol-1', ''));
this.constants.push(new CConstant('Unified mass unit (dalton)', 'u', 1.660538921e-27, 'kg', 'Standard unit of mass that quantifies mass on an atomic or molecular scale'));
this.constants.push(new CConstant('Vacuum permeability', 'µ0', 1.2566e-6, 'T.m.A-1', 'Vacuum permeability is the magnetic permeability in a classical vacuum.'));
this.constants.push(new CConstant('Vacuum permittivity', 'ε0', 8.85418782e-12, 'F.m-1', 'Vacuum permittivity is an ideal, (baseline) physical constant, which is the value of the absolute dielectric permittivity of classical vacuum.'));
this.constants.push(new CConstant('Impedance of free space', 'Z0', 376.730, 'Ω', 'The impedance of free space equals the product of the vacuum permeability μ0 and the speed of light in vacuum c0.'));
this.constants.push(new CConstant('Astronomical unit', 'au', 149597870700, 'm', 'Astronomical unit is the distance from Earth to the Sun'));
this.constants.push(new CConstant('Parsec', 'pc', 648000 / Math.PI * 149597870700, 'm', 'The parsec is a unit of length used to measure large distances to astronomical objects outside the Solar System. A parsec is defined as the distance at which one astronomical unit subtends an angle of one arcsecond,[1] which corresponds to 648000/π astronomical units.'));
this.constants.push(new CConstant('Light year', 'lr', 9460730472580800, 'm', 'Light-year is the distance that light travels in vacuum in one Julian year (365.25 days).'));
this.constants.push(new CConstant('Electronvolt', 'eV', 1.602176565e-19, 'J', ''));
// Set physical quantities
/** Solar system object mass */
this.constants.push(new CConstant('Solar mass', 'M☉', 1.9884e30, 'kg', ''));
this.constants.push(new CConstant('Earth mass', 'M⊕', 5.9722e24, 'kg', ''));
this.constants.push(new CConstant('Lunar mass', 'ML', 7.342e22, 'kg', ''));
this.constants.push(new CConstant('Jupiter mass', 'MJ', 1.8986e27, 'kg', ''));
/** Solar system object radius */
this.constants.push(new CConstant('Solar radius', 'R☉', 696342000, 'm', ''));
this.constants.push(new CConstant('Earth radius', 'R⊕', 6378137, 'm', ''));
this.constants.push(new CConstant('Lunar radius', 'RL', 1737400, 'm', ''));
/** Particle mass */
this.constants.push(new CConstant('Electron mass', 'ML', 9.10938291e-31, 'kg', ''));
this.constants.push(new CConstant('Neutron mass', 'ML', 1.67493e-27, 'kg', ''));
this.constants.push(new CConstant('Proton mass', 'ML', 1.672649e-27, 'kg', ''));
this.constants.forEach((/**
* @param {?} element
* @return {?}
*/
function (element) {
_this[element.symbol] = element.value;
}));
}
/**
* getConstantInfo method.
*
* this method simply log to the console class properties and methods.
*
* @remarks
* This method is part of the {@link core-library#Statistics | Statistics subsystem}.
*
* @beta
*/
/**
* getConstantInfo method.
*
* this method simply log to the console class properties and methods.
*
* \@remarks
* This method is part of the {\@link core-library#Statistics | Statistics subsystem}.
*
* \@beta
* @param {?} name
* @return {?}
*/
CPhysicsConstants.prototype.getConstantInfo = /**
* getConstantInfo method.
*
* this method simply log to the console class properties and methods.
*
* \@remarks
* This method is part of the {\@link core-library#Statistics | Statistics subsystem}.
*
* \@beta
* @param {?} name
* @return {?}
*/
function (name) {
return this.constants.find((/**
* @param {?} i
* @return {?}
*/
function (i) { return i.symbol === name; }));
}; // eo getConstantInfo method
/**
* logConstants method.
*
* this method simply log to the console class properties and methods.
*
* @remarks
* This method is part of the {@link core-library#Statistics | Statistics subsystem}.
*
* @beta
*/
// eo getConstantInfo method
/**
* logConstants method.
*
* this method simply log to the console class properties and methods.
*
* \@remarks
* This method is part of the {\@link core-library#Statistics | Statistics subsystem}.
*
* \@beta
* @return {?}
*/
CPhysicsConstants.prototype.logConstants =
// eo getConstantInfo method
/**
* logConstants method.
*
* this method simply log to the console class properties and methods.
*
* \@remarks
* This method is part of the {\@link core-library#Statistics | Statistics subsystem}.
*
* \@beta
* @return {?}
*/
function () {
console.log(this.constants);
}; // eo logConstants method
/**
* toJSON method.
*
* this method return the public and protected object properties.
*
* @remarks
* This method is part of the {@link core-library#Statistics | Statistics subsystem}.
*
* @beta
*/
// eo logConstants method
/**
* toJSON method.
*
* this method return the public and protected object properties.
*
* \@remarks
* This method is part of the {\@link core-library#Statistics | Statistics subsystem}.
*
* \@beta
* @return {?}
*/
CPhysicsConstants.prototype.toJSON =
// eo logConstants method
/**
* toJSON method.
*
* this method return the public and protected object properties.
*
* \@remarks
* This method is part of the {\@link core-library#Statistics | Statistics subsystem}.
*
* \@beta
* @return {?}
*/
function () {
/** @type {?} */
var properties = Object.getOwnPropertyNames(this);
return properties;
}; // eo toJSON method
/**
*
* Conversion helpers
*
*/
/**
* unit of length conversion helpers
*/
/**
* meter2au method.
*
* this method convert meters to astronomical unit.
*
* @remarks
* This method is part of the {@link core-library#Statistics | Statistics subsystem}.
*
* @beta
*/
// eo toJSON method
/**
*
* Conversion helpers
*
*/
/**
* unit of length conversion helpers
*/
/**
* meter2au method.
*
* this method convert meters to astronomical unit.
*
* \@remarks
* This method is part of the {\@link core-library#Statistics | Statistics subsystem}.
*
* \@beta
* @param {?} value
* @return {?}
*/
CPhysicsConstants.prototype.meter2au =
// eo toJSON method
/**
*
* Conversion helpers
*
*/
/**
* unit of length conversion helpers
*/
/**
* meter2au method.
*
* this method convert meters to astronomical unit.
*
* \@remarks
* This method is part of the {\@link core-library#Statistics | Statistics subsystem}.
*
* \@beta
* @param {?} value
* @return {?}
*/
function (value) {
return Math.round(value / this.au * 1000000) / 1000000;
}; // eo meter2au method
/**
* au2meter method.
*
* this method convert astronomical unit to meters.
*
* @remarks
* This method is part of the {@link core-library#Statistics | Statistics subsystem}.
*
* @beta
*/
// eo meter2au method
/**
* au2meter method.
*
* this method convert astronomical unit to meters.
*
* \@remarks
* This method is part of the {\@link core-library#Statistics | Statistics subsystem}.
*
* \@beta
* @param {?} value
* @return {?}
*/
CPhysicsConstants.prototype.au2meter =
// eo meter2au method
/**
* au2meter method.
*
* this method convert astronomical unit to meters.
*
* \@remarks
* This method is part of the {\@link core-library#Statistics | Statistics subsystem}.
*
* \@beta
* @param {?} value
* @return {?}
*/
function (value) {
return value * this.au;
}; // eo au2meter method
/**
* au2kilometer method.
*
* this method convert astronomical unit to kilometers.
*
* @remarks
* This method is part of the {@link core-library#Statistics | Statistics subsystem}.
*
* @beta
*/
// eo au2meter method
/**
* au2kilometer method.
*
* this method convert astronomical unit to kilometers.
*
* \@remarks
* This method is part of the {\@link core-library#Statistics | Statistics subsystem}.
*
* \@beta
* @param {?} value
* @return {?}
*/
CPhysicsConstants.prototype.au2kilometer =
// eo au2meter method
/**
* au2kilometer method.
*
* this method convert astronomical unit to kilometers.
*
* \@remarks
* This method is part of the {\@link core-library#Statistics | Statistics subsystem}.
*
* \@beta
* @param {?} value
* @return {?}
*/
function (value) {
return value * this.au / 1000;
}; // eo au2kilometer method
/**
* meter2pc method.
*
* this method convert meters to parsec.
*
* @remarks
* This method is part of the {@link core-library#Statistics | Statistics subsystem}.
*
* @beta
*/
// eo au2kilometer method
/**
* meter2pc method.
*
* this method convert meters to parsec.
*
* \@remarks
* This method is part of the {\@link core-library#Statistics | Statistics subsystem}.
*
* \@beta
* @param {?} value
* @return {?}
*/
CPhysicsConstants.prototype.meter2pc =
// eo au2kilometer method
/**
* meter2pc method.
*
* this method convert meters to parsec.
*
* \@remarks
* This method is part of the {\@link core-library#Statistics | Statistics subsystem}.
*
* \@beta
* @param {?} value
* @return {?}
*/
function (value) {
return Math.round(value / this.pc * 1000000) / 1000000;
}; // eo meter2pc method
/**
* pc2meter method.
*
* this method convert parsec to meters.
*
* @remarks
* This method is part of the {@link core-library#Statistics | Statistics subsystem}.
*
* @beta
*/
// eo meter2pc method
/**
* pc2meter method.
*
* this method convert parsec to meters.
*
* \@remarks
* This method is part of the {\@link core-library#Statistics | Statistics subsystem}.
*
* \@beta
* @param {?} value
* @return {?}
*/
CPhysicsConstants.prototype.pc2meter =
// eo meter2pc method
/**
* pc2meter method.
*
* this method convert parsec to meters.
*
* \@remarks
* This method is part of the {\@link core-library#Statistics | Statistics subsystem}.
*
* \@beta
* @param {?} value
* @return {?}
*/
function (value) {
return value * this.pc;
}; // eo pc2meter method
/**
* pc2kilometer method.
*
* this method convert parsec to kilometers.
*
* @remarks
* This method is part of the {@link core-library#Statistics | Statistics subsystem}.
*
* @beta
*/
// eo pc2meter method
/**
* pc2kilometer method.
*
* this method convert parsec to kilometers.
*
* \@remarks
* This method is part of the {\@link core-library#Statistics | Statistics subsystem}.
*
* \@beta
* @param {?} value
* @return {?}
*/
CPhysicsConstants.prototype.pc2kilometer =
// eo pc2meter method
/**
* pc2kilometer method.
*
* this method convert parsec to kilometers.
*
* \@remarks
* This method is part of the {\@link core-library#Statistics | Statistics subsystem}.
*
* \@beta
* @param {?} value
* @return {?}
*/
function (value) {
return value * this.pc / 1000;
}; // eo pc2kilometer method
/**
* pc2au method.
*
* this method convert parsec to astronomical unit.
*
* @remarks
* This method is part of the {@link core-library#Statistics | Statistics subsystem}.
*
* @beta
*/
// eo pc2kilometer method
/**
* pc2au method.
*
* this method convert parsec to astronomical unit.
*
* \@remarks
* This method is part of the {\@link core-library#Statistics | Statistics subsystem}.
*
* \@beta
* @param {?} value
* @return {?}
*/
CPhysicsConstants.prototype.pc2au =
// eo pc2kilometer method
/**
* pc2au method.
*
* this method convert parsec to astronomical unit.
*
* \@remarks
* This method is part of the {\@link core-library#Statistics | Statistics subsystem}.
*
* \@beta
* @param {?} value
* @return {?}
*/
function (value) {
return this.meter2au(this.pc2meter(value));
}; // eo pc2au method
/**
* au2pc method.
*
* this method convert astronomical unit to parsec.
*
* @remarks
* This method is part of the {@link core-library#Statistics | Statistics subsystem}.
*
* @beta
*/
// eo pc2au method
/**
* au2pc method.
*
* this method convert astronomical unit to parsec.
*
* \@remarks
* This method is part of the {\@link core-library#Statistics | Statistics subsystem}.
*
* \@beta
* @param {?} value
* @return {?}
*/
CPhysicsConstants.prototype.au2pc =
// eo pc2au method
/**
* au2pc method.
*
* this method convert astronomical unit to parsec.
*
* \@remarks
* This method is part of the {\@link core-library#Statistics | Statistics subsystem}.
*
* \@beta
* @param {?} value
* @return {?}
*/
function (value) {
return this.meter2pc(this.au2meter(value));
}; // eo au2pc method
/**
* lr2pc method.
*
* this method convert light year unit to parsec.
*
* @remarks
* This method is part of the {@link core-library#Statistics | Statistics subsystem}.
*
* @beta
*/
// eo au2pc method
/**
* lr2pc method.
*
* this method convert light year unit to parsec.
*
* \@remarks
* This method is part of the {\@link core-library#Statistics | Statistics subsystem}.
*
* \@beta
* @param {?} value
* @return {?}
*/
CPhysicsConstants.prototype.lr2pc =
// eo au2pc method
/**
* lr2pc method.
*
* this method convert light year unit to parsec.
*
* \@remarks
* This method is part of the {\@link core-library#Statistics | Statistics subsystem}.
*
* \@beta
* @param {?} value
* @return {?}
*/
function (value) {
return this.meter2pc(this.lr2meter(value));
}; // eo lr2pc method
/**
* lr2au method.
*
* this method convert light year to astronomical unit.
*
* @remarks
* This method is part of the {@link core-library#Statistics | Statistics subsystem}.
*
* @beta
*/
// eo lr2pc method
/**
* lr2au method.
*
* this method convert light year to astronomical unit.
*
* \@remarks
* This method is part of the {\@link core-library#Statistics | Statistics subsystem}.
*
* \@beta
* @param {?} value
* @return {?}
*/
CPhysicsConstants.prototype.lr2au =
// eo lr2pc method
/**
* lr2au method.
*
* this method convert light year to astronomical unit.
*
* \@remarks
* This method is part of the {\@link core-library#Statistics | Statistics subsystem}.
*
* \@beta
* @param {?} value
* @return {?}
*/
function (value) {
return this.meter2au(this.lr2meter(value));
}; // eo lr2au method
/**
* lr2meter method.
*
* this method convert light year to meter.
*
* @remarks
* This method is part of the {@link core-library#Statistics | Statistics subsystem}.
*
* @beta
*/
// eo lr2au method
/**
* lr2meter method.
*
* this method convert light year to meter.
*
* \@remarks
* This method is part of the {\@link core-library#Statistics | Statistics subsystem}.
*
* \@beta
* @param {?} value
* @return {?}
*/
CPhysicsConstants.prototype.lr2meter =
// eo lr2au method
/**
* lr2meter method.
*
* this method convert light year to meter.
*
* \@remarks
* This method is part of the {\@link core-library#Statistics | Statistics subsystem}.
*
* \@beta
* @param {?} value
* @return {?}
*/
function (value) {
return value * this.lr;
}; // eo lr2meter method
/**
* lr2kilometer method.
*
* this method convert light year to kilometer.
*
* @remarks
* This method is part of the {@link core-library#Statistics | Statistics subsystem}.
*
* @beta
*/
// eo lr2meter method
/**
* lr2kilometer method.
*
* this method convert light year to kilometer.
*
* \@remarks
* This method is part of the {\@link core-library#Statistics | Statistics subsystem}.
*
* \@beta
* @param {?} value
* @return {?}
*/
CPhysicsConstants.prototype.lr2kilometer =
// eo lr2meter method
/**
* lr2kilometer method.
*
* this method convert light year to kilometer.
*
* \@remarks
* This method is part of the {\@link core-library#Statistics | Statistics subsystem}.
*
* \@beta
* @param {?} value
* @return {?}
*/
function (value) {
return value * this.lr / 1000;
}; // eo lr2kilometer method
/**
* meter2lr method.
*
* this method convert meter to light year.
*
* @remarks
* This method is part of the {@link core-library#Statistics | Statistics subsystem}.
*
* @beta
*/
// eo lr2kilometer method
/**
* meter2lr method.
*
* this method convert meter to light year.
*
* \@remarks
* This method is part of the {\@link core-library#Statistics | Statistics subsystem}.
*
* \@beta
* @param {?} value
* @return {?}
*/
CPhysicsConstants.prototype.meter2lr =
// eo lr2kilometer method
/**
* meter2lr method.
*
* this method convert meter to light year.
*
* \@remarks
* This method is part of the {\@link core-library#Statistics | Statistics subsystem}.
*
* \@beta
* @param {?} value
* @return {?}
*/
function (value) {
return Math.round(value / this.lr * 1000000) / 1000000;
}; // eo meter2lr method
/**
* au2lr method.
*
* this method convert astronomical unit to light year.
*
* @remarks
* This method is part of the {@link core-library#Statistics | Statistics subsystem}.
*
* @beta
*/
// eo meter2lr method
/**
* au2lr method.
*
* this method convert astronomical unit to light year.
*
* \@remarks
* This method is part of the {\@link core-library#Statistics | Statistics subsystem}.
*
* \@beta
* @param {?} value
* @return {?}
*/
CPhysicsConstants.prototype.au2lr =
// eo meter2lr method
/**
* au2lr method.
*
* this method convert astronomical unit to light year.
*
* \@remarks
* This method is part of the {\@link core-library#Statistics | Statistics subsystem}.
*
* \@beta
* @param {?} value
* @return {?}
*/
function (value) {
return this.meter2lr(this.au2meter(value));
}; // eo au2lr method
/**
* pc2lr method.
*
* this method convert parsec to light year.
*
* @remarks
* This method is part of the {@link core-library#Statistics | Statistics subsystem}.
*
* @beta
*/
// eo au2lr method
/**
* pc2lr method.
*
* this method convert parsec to light year.
*
* \@remarks
* This method is part of the {\@link core-library#Statistics | Statistics subsystem}.
*
* \@beta
* @param {?} value
* @return {?}
*/
CPhysicsConstants.prototype.pc2lr =
// eo au2lr method
/**
* pc2lr method.
*
* this method convert parsec to light year.
*
* \@remarks
* This method is part of the {\@link core-library#Statistics | Statistics subsystem}.
*
* \@beta
* @param {?} value
* @return {?}
*/
function (value) {
return this.meter2lr(this.pc2meter(value));
}; // eo pc2lr method
/**
* unit of mass conversion helpers
*/
/**
* kg2ev method.
*
* this method convert kilogram to electronvolt.
*
* @remarks
* This method is part of the {@link core-library#Statistics | Statistics subsystem}.
*
* @beta
*/
// eo pc2lr method
/**
* unit of mass conversion helpers
*/
/**
* kg2ev method.
*
* this method convert kilogram to electronvolt.
*
* \@remarks
* This method is part of the {\@link core-library#Statistics | Statistics subsystem}.
*
* \@beta
* @param {?} value
* @return {?}
*/
CPhysicsConstants.prototype.kg2ev =
// eo pc2lr method
/**
* unit of mass conversion helpers
*/
/**
* kg2ev method.
*
* this method convert kilogram to electronvolt.
*
* \@remarks
* This method is part of the {\@link core-library#Statistics | Statistics subsystem}.
*
* \@beta
* @param {?} value
* @return {?}
*/
function (value) {
return Math.round((value / this.eV * Math.pow(this.c, 2)) * 1000000) / 1000000;
}; // eo kg2ev method
/**
* ev2kg method.
*
* this method convert kilogram to electronvolt using Albert Einstein formula E=mc2.
*
* @remarks
* This method is part of the {@link core-library#Statistics | Statistics subsystem}.
*
* @beta
*/
// eo kg2ev method
/**
* ev2kg method.
*
* this method convert kilogram to electronvolt using Albert Einstein formula E=mc2.
*
* \@remarks
* This method is part of the {\@link core-library#Statistics | Statistics subsystem}.
*
* \@beta
* @param {?} value
* @return {?}
*/
CPhysicsConstants.prototype.ev2kg =
// eo kg2ev method
/**
* ev2kg method.
*
* this method convert kilogram to electronvolt using Albert Einstein formula E=mc2.
*
* \@remarks
* This method is part of the {\@link core-library#Statistics | Statistics subsystem}.
*
* \@beta
* @param {?} value
* @return {?}
*/
function (value) {
return value * this.eV / Math.pow(this.c, 2);
}; // eo ev2kg method
return CPhysicsConstants;
}());
// eo CConstant class
export { CPhysicsConstants };
if (false) {
/** @type {?} */
CPhysicsConstants.prototype.constants;
/* Skipping unhandled member: [index: string]: any;*/
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN0cm9waHlzaWNzLWxpYnJhcnkucGh5c2ljcy1jb25zdGFudHMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AY2FiaW5mby5ldS9hc3Ryb3BoeXNpY3MtbGlicmFyeS8iLCJzb3VyY2VzIjpbImxpYi9hc3Ryb3BoeXNpY3MtbGlicmFyeS5waHlzaWNzLWNvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQ0E7SUFPSTs7Ozs7Ozs7O09BU0c7SUFFSCxtQkFBYyxJQUFZLEVBQUUsTUFBYyxFQUFFLEtBQWEsRUFBRSxJQUFZLEVBQUUsV0FBbUI7UUFDeEYsd0JBQXdCO1FBQ3hCLElBQUksQ0FBQyxJQUFJLEdBQWEsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxNQUFNLEdBQVcsTUFBTSxDQUFDO1FBQzdCLElBQUksQ0FBQyxLQUFLLEdBQVksS0FBSyxDQUFDO1FBQzVCLElBQUksQ0FBQyxJQUFJLEdBQWEsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxXQUFXLEdBQU0sV0FBVyxDQUFDO0lBQ3RDLENBQUMsQ0FBQyxpQkFBaUI7SUFDdkIsZ0JBQUM7QUFBRCxDQUFDLEFBMUJELElBMEJDLENBQUMscUJBQXFCOzs7O0lBekJuQix5QkFBb0I7O0lBQ3BCLDJCQUFzQjs7SUFDdEIsMEJBQXFCOztJQUNyQix5QkFBb0I7O0lBQ3BCLGdDQUEyQjs7O0FBdUIvQjs7O0lBS0k7Ozs7Ozs7OztPQVNHO0lBRUg7UUFBQSxpQkE2Q0M7UUExRE0sY0FBUyxHQUFrQixFQUFFLENBQUM7UUFjakMsd0JBQXdCO1FBQ3hCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFFLElBQUksU0FBUyxDQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFFLENBQUUsQ0FBQztRQUNoRixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBRSxJQUFJ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Ozs7Ozs7Ozs7O0lBRUksaUNBQUs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQVosVUFBYyxLQUFhO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBRSxDQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUUsQ0FBRSxHQUFHLE9BQU8sQ0FBQyxHQUFHLE9BQU8sQ0FBQztJQUN4RixDQUFDLEVBQUMsa0JBQWtCO0lBR3BCOzs7Ozs7Ozs7T0FTRzs7Ozs7Ozs7Ozs7Ozs7SUFFSSxpQ0FBSzs7Ozs7Ozs7Ozs7Ozs7SUFBWixVQUFjLEtBQWE7UUFDdkIsT0FBTyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFFLENBQUM7SUFDbkQsQ0FBQyxFQUFDLGtCQUFrQjtJQUd4Qix3QkFBQztBQUFELENBQUMsQUFoWkQsSUFnWkM7Ozs7O0lBN1lHLHNDQUFxQyIsInNvdXJjZXNDb250ZW50IjpbIiAgLyoqXG4gICAqIFRoaXMgY2xhc3MgZGVmaW5lIHBoeXNpY3MgY29uc3RhbnRzIGFuZCBjYWxjdWxhdGVkIHBoeXNpY3MgY29uc3RhbnRzLlxuICAgKlxuICAgKiBJbnN0YW5jaWF0aW9uIGV4YW1wbGUgOiBcbiAgICogXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgaW5zdGFuY2UgPSBuZXcgQ1BoeXNpY3NDb25zdGFudHMoKTtcbiAgICogYGBgXG4gICAqIFxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGlzIG1ldGhvZCBpcyBwYXJ0IG9mIHRoZSB7QGxpbmsgY29yZS1saWJyYXJ5I1N0YXRpc3RpY3MgfCBTdGF0aXN0aWNzIHN1YnN5c3RlbX0uXG4gICAqICBcbiAgICogQGF1dGhvciBBbGFpbiBEZXNlaW5lXG4gICAqIFxuICAgKiBAY29weXJpZ2h0IENFSSBBbGFpbiBEZXNlaW5lIDE5OTItMjAxOVxuICAgKiBcbiAgICogQGJldGEgXG4gICAqIFxuICAgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQWxhaW4gRGVzZWluZVxuICAgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcbiAgICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZVxuICAgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLlxuICAgKiBcbiAgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVNcbiAgICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRlxuICAgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUlxuICAgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTXG4gICAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT05cbiAgICogT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTlxuICAgKiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxuICAgKiBcbiAgICovXG5cbmV4cG9ydCBjbGFzcyBDQ29uc3RhbnQge1xuICAgIHB1YmxpYyBuYW1lOiBzdHJpbmc7XG4gICAgcHVibGljIHN5bWJvbDogc3RyaW5nO1xuICAgIHB1YmxpYyB2YWx1ZTogbnVtYmVyO1xuICAgIHB1YmxpYyB1bml0OiBzdHJpbmc7XG4gICAgcHVibGljIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3Rvci4gXG4gICAgICogXG4gICAgICogVGhlIGNvbnN0cnVjdG9yIG9mIHRoaXMgY2xhc3MgY2FsY3VsYXRlIGNhbGN1bGF0ZWQgcGh5c2ljcyBjb25zdGFudHMuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFRoaXMgbWV0aG9kIGlzIHBhcnQgb2YgdGhlIHtAbGluayBjb3JlLWxpYnJhcnkjU3RhdGlzdGljcyB8IFN0YXRpc3RpY3Mgc3Vic3lzdGVtfS5cbiAgICAgKlxuICAgICAqIEBiZXRhXG4gICAgICovXG5cbiAgICBjb25zdHJ1Y3RvciAoIG5hbWU6IHN0cmluZywgc3ltYm9sOiBzdHJpbmcsIHZhbHVlOiBudW1iZXIsIHVuaXQ6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZyApIHtcbiAgICAgICAgLy8gU2V0IHBoeXNpY3MgY29uc3RhbnRzXG4gICAgICAgIHRoaXMubmFtZSAgICAgICAgICAgPSBuYW1lO1xuICAgICAgICB0aGlzLnN5bWJvbCAgICAgICAgID0gc3ltYm9sO1xuICAgICAgICB0aGlzLnZhbHVlICAgICAgICAgID0gdmFsdWU7XG4gICAgICAgIHRoaXMudW5pdCAgICAgICAgICAgPSB1bml0O1xuICAgICAgICB0aGlzLmRlc2NyaXB0aW9uICAgID0gZGVzY3JpcHRpb247XG4gICAgfSAvLyBlbyBjb25zdHJ1Y3RvclxufSAvLyBlbyBDQ29uc3RhbnQgY2xhc3NcblxuZXhwb3J0IGNsYXNzIENQaHlzaWNzQ29uc3RhbnRzIHtcblxuICAgIFtpbmRleDogc3RyaW5nXTogYW55O1xuICAgIHB1YmxpYyBjb25zdGFudHM6IENDb25zdGFudFtdICAgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdG9yLiBcbiAgICAgKiBcbiAgICAgKiBUaGUgY29uc3RydWN0b3Igb2YgdGhpcyBjbGFzcyBjYWxjdWxhdGUgY2FsY3VsYXRlZCBwaHlzaWNzIGNvbnN0YW50cy5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogVGhpcyBtZXRob2QgaXMgcGFydCBvZiB0aGUge0BsaW5rIGNvcmUtbGlicmFyeSNTdGF0aXN0aWNzIHwgU3RhdGlzdGljcyBzdWJzeXN0ZW19LlxuICAgICAqXG4gICAgICogQGJldGFcbiAgICAgKi9cblxuICAgIGNvbnN0cnVjdG9yICgpIHtcbiAgICAgICAgLy8gU2V0IHBoeXNpY3MgY29uc3RhbnRzXG4gICAgICAgIHRoaXMuY29uc3RhbnRzLnB1c2goIG5ldyBDQ29uc3RhbnQoICdQSSBjb25zdGFudCcsICfPgCcsIE1hdGguUEksICdOb25lJywgJycgKSApO1xuICAgICAgICB0aGlzLmNvbnN0YW50cy5wdXNoKCBuZXcgQ0NvbnN0YW50KCAnQ2VsZXJpdHknLCAnYycsIDI5OTc5MjQ1OCwgJ20ucy0xJywgJ0NlbGVyaXR5IG9mIGxpZ2h0IGluIHZhY2N1bScgKSApO1xuICAgICAgICB0aGlzLmNvbnN0YW50cy5wdXNoKCBuZXcgQ0NvbnN0YW50KCAnUGxhbmNrIGNvbnN0YW50JywgJ2gnLCA2LjYyNjA3MDE1ZS0zNCwgJ0oucycsICdUaGUgUGxhbmNrIGNvbnN0YW50IGlzIGEgcGh5c2ljYWwgY29uc3RhbnQgdGhhdCBpcyB0aGUgcXVhbnR1bSBvZiBlbGVjdHJvbWFnbmV0aWMgYWN0aW9uLCB3aGljaCByZWxhdGVzIHRoZSBlbmVyZ3kgY2FycmllZCBieSBhIHBob3RvbiB0byBpdHMgZnJlcXVlbmN5JyApICk7XG4gICAgICAgIHRoaXMuY29uc3RhbnRzLnB1c2goIG5ldyBDQ29uc3RhbnQoICdCb2x0em1hbm4gY29uc3RhbnQnLCAnaycsIDEuMzgwNjQ4NTJlLTIzLCAnSi5LLTEnLCAnVGhlIEJvbHR6bWFubiBjb25zdGFudCAoa0Igb3IgaykgaXMgYSBwaHlzaWNhbCBjb25zdGFudCB3aGljaCByZWxhdGVzIHRoZSBhdmVyYWdlIHJlbGF0aXZlIGtpbmV0aWMgZW5lcmd5IG9mIHBhcnRpY2xlcyBpbiBhIGdhcyB3aXRoIHRoZSB0ZW1wZXJhdHVyZSBvZiB0aGUgZ2FzIGFuZCBvY2N1cnMgaW4gUGxhbmNrXFwncyBsYXcgb2YgYmxhY2stYm9keSByYWRpYXRpb24gYW5kIGluIEJvbHR6bWFublxcJ3MgZW50cm9weSBmb3JtdWxhLicgKSApO1xuICAgICAgICB0aGlzLmNvbnN0YW50cy5wdXNoKCBuZXcgQ0NvbnN0YW50KCAnR3Jhdml0YXRpb25hbCBjb25zdGFudCcsICdHJywgNi42NzQwOGUtMTEsICdOLm0yLmtnLTInLCAnR3Jhdml0YXRpb25hbCBjb25zdGFudCBpcyBhbiBlbXBpcmljYWwgcGh5c2ljYWwgY29uc3RhbnQgaW52b2x2ZWQgaW4gdGhlIGNhbGN1bGF0aW9uIG9mIGdyYXZpdGF0aW9uYWwgZWZmZWN0cyBpbiBJc2FhYyBOZXd0b25cXCdzIGxhdyBvZiB1bml2ZXJzYWwgZ3Jhdml0YXRpb24gYW5kIGluIEFsYmVydCBFaW5zdGVpblxcJ3MgZ2VuZXJhbCB0aGVvcnkgb2YgcmVsYXRpdml0eS4nICkgKTsgLy8gVE9ETyBBbGFpbiA6IFbDqXJpZmllciB1bml0w6lcbiAgICAgICAgdGhpcy5jb25zdGFudHMucHVzaCggbmV3IENDb25zdGFudCggJ0VsZW1lbnRhcnkgY2hhcmdlJywnZScsIDEuNjAyMTc2NjM0ZS0xOSwgJ0EucycsICcnICkgKTtcbiAgICAgICAgdGhpcy5jb25zdGFudHMucHVzaCggbmV3IENDb25zdGFudCggJ0NvdWxvbWInLCdDJywgMSwgJ0EucycsICcnICkgKTtcbiAgICAgICAgdGhpcy5jb25zdGFudHMucHVzaCggbmV3IENDb25zdGFudCggJ0F2b2dhZHJvIGNvbnN0YW50JywnTkEnLCA2LjAyMjE0MDg1NywgJ21vbC0xJywgJycgKSApO1xuICAgICAgICB0aGlzLmNvbnN0YW50cy5wdXNoKCBuZXcgQ0NvbnN0YW50KCAnU3RhbmRhcmQgYWNjZWxlcmF0aW9uJywnZycsIDkuODA2NjUsICdtLnMtMicsICdTdGFuZGFyZCBhY2NlbGVyYXRpb24gZHVlIHRvIGdyYXZpdHkgb24gZWFydGgnICkgKTtcbiAgICAgICAgdGhpcy5jb25zdGFudHMucHVzaCggbmV3IENDb25zdGFudCggJ0JvaHIgcmFkaXVzJywnYTAnLCAwLjUyOTE3NzIxMDkyLCAnw4UnLCAnVGhlIEJvaHIgcmFkaXVzIGlzIGFwcHJveGltYXRlbHkgZXF1YWwgdG8gdGhlIG1vc3QgcHJvYmFibGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgbnVjbGV1cyBhbmQgdGhlIGVsZWN0cm9uIGluIGEgaHlkcm9nZW4gYXRvbSBpbiBpdHMgZ3JvdW5kIHN0YXRlLiAnICkgKTtcbiAgICAgICAgdGhpcy5jb25zdGFudHMucHVzaCggbmV3IENDb25zdGFudCggJ0lkZWFsIGdhcyBjb25zdGFudCcsJ1InLCA4LjMxNDQ1OTgsICdKLkstMS5tb2wtMScsICcnICkgKTtcbiAgICAgICAgdGhpcy5jb25zdGFudHMucHVzaCggbmV3IENDb25zdGFudCggJ1VuaWZpZWQgbWFzcyB1bml0IChkYWx0b24pJywndScsIDEuNjYwNTM4OTIxZS0yNywgJ2tnJywgJ1N0YW5kYXJkIHVuaXQgb2YgbWFzcyB0aGF0IHF1YW50aWZpZXMgbWFzcyBvbiBhbiBhdG9taWMgb3IgbW9sZWN1bGFyIHNjYWxlJyApICk7XG4gICAgICAgIHRoaXMuY29uc3RhbnRzLnB1c2goIG5ldyBDQ29uc3RhbnQoICdWYWN1dW0gcGVybWVhYmlsaXR5JywnwrUwJywgMS4yNTY2ZS02LCAnVC5tLkEtMScsICdWYWN1dW0gcGVybWVhYmlsaXR5IGlzIHRoZSBtYWduZXRpYyBwZXJtZWFiaWxpdHkgaW4gYSBjbGFzc2ljYWwgdmFjdXVtLicgKSApO1xuICAgICAgICB0aGlzLmNvbnN0YW50cy5wdXNoKCBuZXcgQ0NvbnN0YW50KCAnVmFjdXVtIHBlcm1pdHRpdml0eScsJ861MCcsIDguODU0MTg3ODJlLTEyLCAnRi5tLTEnLCAnVmFjdXVtIHBlcm1pdHRpdml0eSBpcyBhbiBpZGVhbCwgKGJhc2VsaW5lKSBwaHlzaWNhbCBjb25zdGFudCwgd2hpY2ggaXMgdGhlIHZhbHVlIG9mIHRoZSBhYnNvbHV0ZSBkaWVsZWN0cmljIHBlcm1pdHRpdml0eSBvZiBjbGFzc2ljYWwgdmFjdXVtLicgKSApO1xuICAgICAgICB0aGlzLmNvbnN0YW50cy5wdXNoKCBuZXcgQ0NvbnN0YW50KCAnSW1wZWRhbmNlIG9mIGZyZWUgc3BhY2UnLCdaMCcsIDM3Ni43MzAsICfOqScsICdUaGUgaW1wZWRhbmNlIG9mIGZyZWUgc3BhY2UgZXF1YWxzIHRoZSBwcm9kdWN0IG9mIHRoZSB2YWN1dW0gcGVybWVhYmlsaXR5IM68MCBhbmQgdGhlIHNwZWVkIG9mIGxpZ2h0IGluIHZhY3V1bSBjMC4nICkgKTtcbiAgICAgICAgdGhpcy5jb25zdGFudHMucHVzaCggbmV3IENDb25zdGFudCggJ0FzdHJvbm9taWNhbCB1bml0JywnYXUnLCAxNDk1OTc4NzA3MDAsICdtJywgJ0FzdHJvbm9taWNhbCB1bml0IGlzIHRoZSBkaXN0YW5jZSBmcm9tIEVhcnRoIHRvIHRoZSBTdW4nICkgKTtcbiAgICAgICAgdGhpcy5jb25zdGFudHMucHVzaCggbmV3IENDb25zdGFudCggJ1BhcnNlYycsJ3BjJywgNjQ4MDAwIC8gTWF0aC5QSSAqIDE0OTU5Nzg3MDcwMCwgJ20nLCAnVGhlIHBhcnNlYyBpcyBhIHVuaXQgb2YgbGVuZ3RoIHVzZWQgdG8gbWVhc3VyZSBsYXJnZSBkaXN0YW5jZXMgdG8gYXN0cm9ub21pY2FsIG9iamVjdHMgb3V0c2lkZSB0aGUgU29sYXIgU3lzdGVtLiBBIHBhcnNlYyBpcyBkZWZpbmVkIGFzIHRoZSBkaXN0YW5jZSBhdCB3aGljaCBvbmUgYXN0cm9ub21pY2FsIHVuaXQgc3VidGVuZHMgYW4gYW5nbGUgb2Ygb25lIGFyY3NlY29uZCxbMV0gd2hpY2ggY29ycmVzcG9uZHMgdG8gNjQ4MDAwL8+AIGFzdHJvbm9taWNhbCB1bml0cy4nICkgKTtcbiAgICAgICAgdGhpcy5jb25zdGFudHMucHVzaCggbmV3IENDb25zdGFudCggJ0xpZ2h0IHllYXInLCdscicsIDk0NjA3MzA0NzI1ODA4MDAsICdtJywgJ0xpZ2h0LXllYXIgaXMgdGhlIGRpc3RhbmNlIHRoYXQgbGlnaHQgdHJhdmVscyBpbiB2YWN1dW0gaW4gb25lIEp1bGlhbiB5ZWFyICgzNjUuMjUgZGF5cykuJyApICk7XG4gICAgICAgIHRoaXMuY29uc3RhbnRzLnB1c2goIG5ldyBDQ29uc3RhbnQoICdFbGVjdHJvbnZvbHQnLCdlVicsIDEuNjAyMTc2NTY1ZS0xOSwgJ0onLCAnJyApICk7XG5cbiAgICAgICAgLy8gU2V0IHBoeXNpY2FsIHF1YW50aXRpZXNcblxuICAgICAgICAvKiogU29sYXIgc3lzdGVtIG9iamVjdCBtYXNzICovXG4gICAgICAgIHRoaXMuY29uc3RhbnRzLnB1c2goIG5ldyBDQ29uc3RhbnQoICdTb2xhciBtYXNzJywnTeKYiScsIDEuOTg4NGUzMCwgJ2tnJywgJycgKSApO1xuICAgICAgICB0aGlzLmNvbnN0YW50cy5wdXNoKCBuZXcgQ0NvbnN0YW50KCAnRWFydGggbWFzcycsJ03iipUnLCA1Ljk3MjJlMjQsICdrZycsICcnICkgKTtcbiAgICAgICAgdGhpcy5jb25zdGFudHMucHVzaCggbmV3IENDb25zdGFudCggJ0x1bmFyIG1hc3MnLCdNTCcsIDcuMzQyZTIyLCAna2cnLCAnJyApICk7XG4gICAgICAgIHRoaXMuY29uc3RhbnRzLnB1c2goIG5ldyBDQ29uc3RhbnQoICdKdXBpdGVyIG1hc3MnLCdNSicsIDEuODk4NmUyNywgJ2tnJywgJycgKSApO1xuXG4gICAgICAgIC8qKiBTb2xhciBzeXN0ZW0gb2JqZWN0IHJhZGl1cyAqL1xuICAgICAgICB0aGlzLmNvbnN0YW50cy5wdXNoKCBuZXcgQ0NvbnN0YW50KCAnU29sYXIgcmFkaXVzJywnUuKYiScsIDY5NjM0MjAwMCwgJ20nLCAnJyApICk7XG4gICAgICAgIHRoaXMuY29uc3RhbnRzLnB1c2goIG5ldyBDQ29uc3RhbnQoICdFYXJ0aCByYWRpdXMnLCdS4oqVJywgNjM3ODEzNywgJ20nLCAnJyApICk7XG4gICAgICAgIHRoaXMuY29uc3RhbnRzLnB1c2goIG5ldyBDQ29uc3RhbnQoICdMdW5hciByYWRpdXMnLCdSTCcsIDE3Mzc0MDAsICdtJywgJycgKSApO1xuXG4gICAgICAgIC8qKiBQYXJ0aWNsZSBtYXNzICovXG4gICAgICAgIHRoaXMuY29uc3RhbnRzLnB1c2goIG5ldyBDQ29uc3RhbnQoICdFbGVjdHJvbiBtYXNzJywnTUwnLCA5LjEwOTM4MjkxZS0zMSwgJ2tnJywgJycgKSApO1xuICAgICAgICB0aGlzLmNvbnN0YW50cy5wdXNoKCBuZXcgQ0NvbnN0YW50KCAnTmV1dHJvbiBtYXNzJywnTUwnLCAxLjY3NDkzZS0yNywgJ2tnJywgJycgKSApO1xuICAgICAgICB0aGlzLmNvbnN0YW50cy5wdXNoKCBuZXcgQ0NvbnN0YW50KCAnUHJvdG9uIG1hc3MnLCdNTCcsIDEuNjcyNjQ5ZS0yNywgJ2tnJywgJycgKSApO1xuXG5cbiAgICAgICAgdGhpcy5jb25zdGFudHMuZm9yRWFjaCggZWxlbWVudCA9PiB7XG4gICAgICAgICAgICB0aGlzW2VsZW1lbnQuc3ltYm9sXSAgICA9IGVsZW1lbnQudmFsdWU7XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZ2V0Q29uc3RhbnRJbmZvIG1ldGhvZC4gXG4gICAgICogXG4gICAgICogdGhpcyBtZXRob2Qgc2ltcGx5IGxvZyB0byB0aGUgY29uc29sZSBjbGFzcyBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBwYXJ0IG9mIHRoZSB7QGxpbmsgY29yZS1saWJyYXJ5I1N0YXRpc3RpY3MgfCBTdGF0aXN0aWNzIHN1YnN5c3RlbX0uXG4gICAgICpcbiAgICAgKiBAYmV0YVxuICAgICAqL1xuXG4gICAgcHVibGljIGdldENvbnN0YW50SW5mbyggbmFtZTogc3RyaW5nICk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnN0YW50cy5maW5kKCBpID0+IGkuc3ltYm9sID09PSBuYW1lICk7XG4gICAgfSAvLyBlbyBnZXRDb25zdGFudEluZm8gbWV0aG9kXG5cblxuICAgIC8qKlxuICAgICAqIGxvZ0NvbnN0YW50cyBtZXRob2QuIFxuICAgICAqIFxuICAgICAqIHRoaXMgbWV0aG9kIHNpbXBseSBsb2cgdG8gdGhlIGNvbnNvbGUgY2xhc3MgcHJvcGVydGllcyBhbmQgbWV0aG9kcy5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogVGhpcyBtZXRob2QgaXMgcGFydCBvZiB0aGUge0BsaW5rIGNvcmUtbGlicmFyeSNTdGF0aXN0aWNzIHwgU3RhdGlzdGljcyBzdWJzeXN0ZW19LlxuICAgICAqXG4gICAgICogQGJldGFcbiAgICAgKi9cblxuICAgICBwdWJsaWMgbG9nQ29uc3RhbnRzKCk6IHZvaWQge1xuICAgICAgICBjb25zb2xlLmxvZyggdGhpcy5jb25zdGFudHMgKTtcbiAgICB9IC8vIGVvIGxvZ0NvbnN0YW50cyBtZXRob2RcblxuXG4gICAgLyoqXG4gICAgICogdG9KU09OIG1ldGhvZC4gXG4gICAgICogXG4gICAgICogdGhpcyBtZXRob2QgcmV0dXJuIHRoZSBwdWJsaWMgYW5kIHByb3RlY3RlZCBvYmplY3QgcHJvcGVydGllcy5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogVGhpcyBtZXRob2QgaXMgcGFydCBvZiB0aGUge0BsaW5rIGNvcmUtbGlicmFyeSNTdGF0aXN0aWNzIHwgU3RhdGlzdGljcyBzdWJzeXN0ZW19LlxuICAgICAqXG4gICAgICogQGJldGFcbiAgICAgKi9cblxuICAgIHB1YmxpYyB0b0pTT04oKTogT2JqZWN0IHtcbiAgICAgICAgbGV0IHByb3BlcnRpZXMgID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoIHRoaXMgKTtcbiAgICAgICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gICAgfSAvLyBlbyB0b0pTT04gbWV0aG9kXG5cblxuICAgIC8qKlxuICAgICAqIFxuICAgICAqIENvbnZlcnNpb24gaGVscGVyc1xuICAgICAqIFxuIC