Capacidad calorifica específica
La capacidad calorífica es una propiedad relevante desde el punto de
vista teórico, pero también para el diseño de procesos en los que este
involucrados equipos intercambio de calor y reactores químicos.
La capacidad calorífica específica se define como la cantidad de
calor que se debe suministar a una unidad de masa para aumentar su
temperatura en \(\Delta T\) °C. Esto se
escribe matemáticamente así:
\[ Q = m c_p \Delta T,\]
donde \(Q\) es el calor
suministrado, \(m\) es la masa y \(c_p\) es la capacidad calorífica
específica. Los experimentos para determinar \(c_p\) controlan la masa, el calor
suministrado, la presión y la temperatura. Entonces, \(c_p\) se halla despejando de la expresión
anterior,
\[c_p = \frac{Q}{m\Delta T}.\]
Normalmente hemos visto como los libros de termodinámica nos
presentan tablas de \(c_p\), en las
cuales se reportan los coeficientes de un polinomio dado un rango de
temperatura, aqui les va un ejemplo extraido de colby,
Tabla 7.2.3:
En este pequeño notebook vamos a realizar un ejercicio guiado para
ajustar la capacidad calorífica específica del gas metano (\(CH_4\)).
Los datos
Vamos a importar un conjunto de datos experimentales del paquete
CHNOSZ.
library(CHNOSZ)
file <- system.file("extdata/cpetc/HW97_Cp.csv", package = "CHNOSZ")
Cpdat <- read.csv(file)
# Agradecimientos para el alumno Ignacio Barrio por esa actualización ----------
# Filtramos el dataframe para que se quede solo CH4
Cpdat <- Cpdat[Cpdat$species == 'CH4',]
# Eliminamos la columna 'species', que solo aporta el nombre de la especie CH4
Cpdat <- subset (Cpdat, select = -c(species))
#-------------------------------------------------------------------------------
head(Cpdat)
Este paquete tiene una función para cambiar unidades. Por ejemplo,
podemos cambiar \(c_p\) de Julios a
calorías, y la presión de mega pascales a bares:
Cpdat$Cp <- convert(Cpdat$Cp, "cal")
Cpdat$P <- convert(Cpdat$P, "bar")
head(Cpdat)
Visualicemos los datos:
library(ggplot2)
Use suppressPackageStartupMessages() to eliminate package startup messages
ggplot(mapping = aes(x=T, y=Cp), data = Cpdat) + geom_point()

Podemos observar que hay un cambio d comportamiento alrededor de una
temperatura de 669 K. Por lo tanto, requerimos de dos ecuaciones.
Dividamos el conjunto de datos para luego ajustar las dos
ecuaciones:
Cpdat1 <- Cpdat[Cpdat$T < 660,]
head(Cpdat1)
Cpdat2 <- Cpdat[Cpdat$T >= 660,]
head(Cpdat2)
Regresión clásica
Pregunta 1
Grafique Cpdat1 y Cpdat2 por aparte, y
utilice estas gráficas como punto de partida para decidir el grado de su
polinomio.
# Grafique en esta celda
Pregunta 2
Ahora, debes ajustar una ecuación polinomial para la capacidad
calorífica del metano según su temperatura.
# Ajuste en esta celda un modelo con lm() para Cpdat1
# Ajuste en esta celda un modelo con lm() para Cpdat2
Herrramientas novedosas
El propio paquete CHNOSZ tiene una función llamada
EOSregress(). Esta función considera tras bambalinas dos
aspectos super interesantes:
- Utiliza la ecuación de Helgeson para \(c_p\)
\[c_p = a + \frac{b}{(T-T_0)^2} + \omega
TX,\]
donde \(a\) y \(b\) son parámetros relacionados con
fenómenos de no solvatación, y \(\omega\) ers un parámetro de solvatación.
\(T_0\) es una temperatura de
referencia (228 K) y \(X\) es la
función de Born que relaciona los procesos de solvatación con las
propiedades dieléctricas del agua.
¡Vaya! En este ejercicio no requerimos ninguna de estas
sofisticaciones porque el metano es apolar y es gaseoso, pero lo
interesante es que podríamos usar este paquete para abordar casos mucho
más complejos.
Pregunta 3
Bueno, aqui es importante hacer una pregunta: ¿es la ecuación de
Hegelson lineal? Responda, y justifique su respuesta.
Respuesta (escribe a continuación)
- Su algoritmo de ajuste utiliza la misma función
lm().
Además, usa internamente la función water() para encontrar
aquellas propiedades electrostáticas del agua relacionadas con la
solvatación que se mencionó anteriormente.
Por ejemplo, se puede ajustar una ecuación para los datos completos
así:
var <- c("invTTheta2", "TXBorn")
Cplm_high <- EOSregress(Cpdat, var)
Cplm_high$coefficients
(Intercept) invTTheta2 TXBorn
329.3733 -1247884.4469 2052194.0779
y el paquete trae la siguiente función para graficar. Ejecute la
siguiente celda y observe la gráfica.
EOSplot(Cpdat, coeficients = round(Cplm_high$coefficients, 1))

También se le puede especificar el punto de cambio, observe el
siguiente código:
Cplm_low <- EOSregress(Cpdat, var, T.max = 600)
Cplm_low$coefficients
(Intercept) invTTheta2 TXBorn
-1.660861e+00 4.459696e+04 -1.295538e+05
Pregunta 4
Ahora, grafica el modelo Cplm_low por ti mismo usando la
función EOSplot()y observa la diferencia con el modelo
Cplm_high
# Grafica en esta celda
EOSplot(Cpdat, coefficients = round(Cplm_low$coefficients, 1))

summary(Cplm_low)
Call:
lm(formula = fmla)
Residuals:
1 2 3 4 5
-0.3177 1.7028 -0.5365 -2.2518 1.4032
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -1.661e+00 5.242e+00 -0.317 0.7814
invTTheta2 4.460e+04 2.342e+04 1.905 0.1971
TXBorn -1.296e+05 3.982e+04 -3.254 0.0829 .
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 2.272 on 2 degrees of freedom
Multiple R-squared: 0.8456, Adjusted R-squared: 0.6911
F-statistic: 5.476 on 2 and 2 DF, p-value: 0.1544
summary(Cplm_high)
Call:
lm(formula = fmla)
Residuals:
Min 1Q Median 3Q Max
-1137.04 -123.48 31.21 196.93 1420.14
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 329.4 718.1 0.459 0.655
invTTheta2 -1247884.4 5464255.3 -0.228 0.823
TXBorn 2052194.1 2980374.9 0.689 0.504
Residual standard error: 672.7 on 12 degrees of freedom
Multiple R-squared: 0.04475, Adjusted R-squared: -0.1145
F-statistic: 0.2811 on 2 and 12 DF, p-value: 0.7598
Pregunta 5
Como mencionamos antes, EOSregress() usa a
lm(). Por lo tanto, puedes usar la función
summary() para indagar la calidad del ajuste. Compara los
modelos Cplm_high y Cplm_low con los modelos
que has ajustado antes. ¿Cuál obtiene mejor calidad de ajuste?
Respuesta (escribe a continuación)
LS0tDQp0aXRsZTogIkFqdXN0ZSBkZSBsYSBjYXBhY2lkYWQgY2Fsb3LDrWZpY2EiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQojIENhcGFjaWRhZCBjYWxvcmlmaWNhIGVzcGVjw61maWNhDQoNCkxhIGNhcGFjaWRhZCBjYWxvcsOtZmljYSBlcyB1bmEgcHJvcGllZGFkIHJlbGV2YW50ZSBkZXNkZSBlbCBwdW50byBkZSB2aXN0YSB0ZcOzcmljbywgcGVybyB0YW1iacOpbiBwYXJhIGVsIGRpc2XDsW8gZGUgcHJvY2Vzb3MgZW4gbG9zIHF1ZSBlc3RlIGludm9sdWNyYWRvcyBlcXVpcG9zIGludGVyY2FtYmlvIGRlIGNhbG9yIHkgcmVhY3RvcmVzIHF1w61taWNvcy4NCg0KTGEgY2FwYWNpZGFkIGNhbG9yw61maWNhIGVzcGVjw61maWNhIHNlIGRlZmluZSBjb21vIGxhIGNhbnRpZGFkIGRlIGNhbG9yIHF1ZSBzZSBkZWJlIHN1bWluaXN0YXIgYSB1bmEgdW5pZGFkIGRlIG1hc2EgcGFyYSBhdW1lbnRhciBzdSB0ZW1wZXJhdHVyYSBlbiAkXERlbHRhIFQkIMKwQy4gRXN0byBzZSBlc2NyaWJlIG1hdGVtw6F0aWNhbWVudGUgYXPDrToNCg0KJCQgUSA9IG0gY19wIFxEZWx0YSBULCQkDQoNCmRvbmRlICRRJCBlcyBlbCBjYWxvciBzdW1pbmlzdHJhZG8sICRtJCBlcyBsYSBtYXNhIHkgJGNfcCQgZXMgbGEgY2FwYWNpZGFkIGNhbG9yw61maWNhIGVzcGVjw61maWNhLiBMb3MgZXhwZXJpbWVudG9zIHBhcmEgZGV0ZXJtaW5hciAkY19wJCBjb250cm9sYW4gbGEgbWFzYSwgZWwgY2Fsb3Igc3VtaW5pc3RyYWRvLCBsYSBwcmVzacOzbiB5IGxhIHRlbXBlcmF0dXJhLiBFbnRvbmNlcywgJGNfcCQgc2UgaGFsbGEgZGVzcGVqYW5kbyBkZSBsYSBleHByZXNpw7NuIGFudGVyaW9yLA0KDQokJGNfcCA9IFxmcmFje1F9e21cRGVsdGEgVH0uJCQNCg0KDQpOb3JtYWxtZW50ZSBoZW1vcyB2aXN0byBjb21vIGxvcyBsaWJyb3MgZGUgdGVybW9kaW7DoW1pY2Egbm9zIHByZXNlbnRhbiB0YWJsYXMgZGUgJGNfcCQsIGVuIGxhcyBjdWFsZXMgc2UgcmVwb3J0YW4gbG9zIGNvZWZpY2llbnRlcyBkZSB1biBwb2xpbm9taW8gZGFkbyB1biByYW5nbyBkZSB0ZW1wZXJhdHVyYSwgYXF1aSBsZXMgdmEgdW4gZWplbXBsbyBleHRyYWlkbyBkZSBbY29sYnksIFRhYmxhIDcuMi4zXShodHRwczovL3d3dy5jb2xieS5lZHUvY2hlbWlzdHJ5L1BDaGVtL25vdGVzL0NoN1RhYmxlcy5wZGYpOg0KDQo8IS0tIGBgYHtyLCBlY2hvPUZBTFNFLCBvdXQud2lkdGg9JzQ1JScsIGZpZy5hbGlnbj0nY2VudGVyJywgZmlnLmNhcD0nVMOtcGljYSB0YWJsYSBjb24gY29lZmljaWVudGVzIGRlIHBvbGlub21pb3MgcGFyYSBjYWRhIGVzcGVjaWUuJ30gLS0+DQo8IS0tIGtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKHJlcCgndGFibGFzX2NwLnBuZycpKSAtLT4NCjwhLS0gYGBgIC0tPg0KDQpFbiBlc3RlIHBlcXVlw7FvIG5vdGVib29rIHZhbW9zIGEgcmVhbGl6YXIgdW4gZWplcmNpY2lvIGd1aWFkbyBwYXJhIGFqdXN0YXIgbGEgY2FwYWNpZGFkIGNhbG9yw61maWNhIGVzcGVjw61maWNhIGRlbCBnYXMgbWV0YW5vICgkQ0hfNCQpLg0KDQojIyBMb3MgZGF0b3MNCg0KVmFtb3MgYSBpbXBvcnRhciB1biBjb25qdW50byBkZSBkYXRvcyBleHBlcmltZW50YWxlcyBkZWwgcGFxdWV0ZSAqKkNITk9TWioqLg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRX0NCmxpYnJhcnkoQ0hOT1NaKQ0KDQpmaWxlIDwtIHN5c3RlbS5maWxlKCJleHRkYXRhL2NwZXRjL0hXOTdfQ3AuY3N2IiwgcGFja2FnZSA9ICJDSE5PU1oiKQ0KQ3BkYXQgPC0gcmVhZC5jc3YoZmlsZSkNCg0KIyBBZ3JhZGVjaW1pZW50b3MgcGFyYSBlbCBhbHVtbm8gSWduYWNpbyBCYXJyaW8gcG9yIGVzYSBhY3R1YWxpemFjacOzbiAtLS0tLS0tLS0tDQojIEZpbHRyYW1vcyBlbCBkYXRhZnJhbWUgcGFyYSBxdWUgc2UgcXVlZGUgc29sbyBDSDQNCkNwZGF0IDwtIENwZGF0W0NwZGF0JHNwZWNpZXMgPT0gJ0NINCcsXQ0KDQojIEVsaW1pbmFtb3MgbGEgY29sdW1uYSAnc3BlY2llcycsIHF1ZSBzb2xvIGFwb3J0YSBlbCBub21icmUgZGUgbGEgZXNwZWNpZSBDSDQNCkNwZGF0IDwtIHN1YnNldCAoQ3BkYXQsIHNlbGVjdCA9IC1jKHNwZWNpZXMpKQ0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmhlYWQoQ3BkYXQpDQpgYGANCg0KRXN0ZSBwYXF1ZXRlIHRpZW5lIHVuYSBmdW5jacOzbiBwYXJhIGNhbWJpYXIgdW5pZGFkZXMuIFBvciBlamVtcGxvLCBwb2RlbW9zIGNhbWJpYXIgJGNfcCQgZGUgSnVsaW9zIGEgY2Fsb3LDrWFzLCB5IGxhIHByZXNpw7NuIGRlIG1lZ2EgcGFzY2FsZXMgYSBiYXJlczoNCg0KYGBge3J9DQpDcGRhdCRDcCA8LSBjb252ZXJ0KENwZGF0JENwLCAiY2FsIikNCkNwZGF0JFAgPC0gY29udmVydChDcGRhdCRQLCAiYmFyIikNCmhlYWQoQ3BkYXQpDQpgYGANCg0KVmlzdWFsaWNlbW9zIGxvcyBkYXRvczoNCg0KYGBge3J9DQpsaWJyYXJ5KGdncGxvdDIpDQpnZ3Bsb3QobWFwcGluZyA9IGFlcyh4PVQsIHk9Q3ApLCBkYXRhID0gQ3BkYXQpICsgZ2VvbV9wb2ludCgpDQpgYGANCg0KUG9kZW1vcyBvYnNlcnZhciBxdWUgaGF5IHVuIGNhbWJpbyBkIGNvbXBvcnRhbWllbnRvIGFscmVkZWRvciBkZSB1bmEgdGVtcGVyYXR1cmEgZGUgNjY5IEsuIFBvciBsbyB0YW50bywgcmVxdWVyaW1vcyBkZSBkb3MgZWN1YWNpb25lcy4gRGl2aWRhbW9zIGVsIGNvbmp1bnRvIGRlIGRhdG9zIHBhcmEgbHVlZ28gYWp1c3RhciBsYXMgZG9zIGVjdWFjaW9uZXM6DQoNCmBgYHtyfQ0KQ3BkYXQxIDwtIENwZGF0W0NwZGF0JFQgPCA2NjAsXQ0KaGVhZChDcGRhdDEpDQpgYGANCg0KYGBge3J9DQpDcGRhdDIgPC0gQ3BkYXRbQ3BkYXQkVCA+PSA2NjAsXQ0KaGVhZChDcGRhdDIpDQpgYGANCg0KIyMgUmVncmVzacOzbiBjbMOhc2ljYQ0KDQoNCiMjIyBQcmVndW50YSAxDQpHcmFmaXF1ZSBgQ3BkYXQxYCB5IGBDcGRhdDJgIHBvciBhcGFydGUsIHkgdXRpbGljZSBlc3RhcyBncsOhZmljYXMgY29tbyBwdW50byBkZSBwYXJ0aWRhIHBhcmEgZGVjaWRpciBlbCBncmFkbyBkZSBzdSBwb2xpbm9taW8uDQoNCmBgYHtyfQ0KIyBHcmFmaXF1ZSBlbiBlc3RhIGNlbGRhDQoNCmBgYA0KDQotLS0NCg0KIyMjIFByZWd1bnRhIDINCkFob3JhLCBkZWJlcyBhanVzdGFyIHVuYSBlY3VhY2nDs24gcG9saW5vbWlhbCBwYXJhIGxhIGNhcGFjaWRhZCBjYWxvcsOtZmljYSBkZWwgbWV0YW5vIHNlZ8O6biBzdSB0ZW1wZXJhdHVyYS4gDQoNCmBgYHtyfQ0KIyBBanVzdGUgZW4gZXN0YSBjZWxkYSB1biBtb2RlbG8gY29uIGxtKCkgcGFyYSBDcGRhdDENCg0KYGBgDQoNCmBgYHtyfQ0KIyBBanVzdGUgZW4gZXN0YSBjZWxkYSB1biBtb2RlbG8gY29uIGxtKCkgcGFyYSBDcGRhdDINCg0KYGBgDQoNCi0tLQ0KDQojIEhlcnJyYW1pZW50YXMgbm92ZWRvc2FzDQoNCkVsIHByb3BpbyBwYXF1ZXRlICoqQ0hOT1NaKiogdGllbmUgdW5hIGZ1bmNpw7NuIGxsYW1hZGEgYEVPU3JlZ3Jlc3MoKWAuIEVzdGEgZnVuY2nDs24gY29uc2lkZXJhIHRyYXMgYmFtYmFsaW5hcyBkb3MgYXNwZWN0b3Mgc3VwZXIgaW50ZXJlc2FudGVzOg0KDQoxLiBVdGlsaXphIGxhIGVjdWFjacOzbiBkZSBIZWxnZXNvbiBwYXJhICRjX3AkDQoNCiQkY19wID0gYSArIFxmcmFje2J9eyhULVRfMCleMn0gKyBcb21lZ2EgVFgsJCQNCg0KZG9uZGUgJGEkIHkgJGIkIHNvbiBwYXLDoW1ldHJvcyByZWxhY2lvbmFkb3MgY29uIGZlbsOzbWVub3MgZGUgbm8gc29sdmF0YWNpw7NuLCB5ICRcb21lZ2EkIGVycyB1biBwYXLDoW1ldHJvIGRlIHNvbHZhdGFjacOzbi4gJFRfMCQgZXMgdW5hIHRlbXBlcmF0dXJhIGRlIHJlZmVyZW5jaWEgKDIyOCBLKSB5ICRYJCBlcyBsYSBmdW5jacOzbiBkZSBCb3JuIHF1ZSByZWxhY2lvbmEgbG9zIHByb2Nlc29zIGRlIHNvbHZhdGFjacOzbiBjb24gbGFzIHByb3BpZWRhZGVzIGRpZWzDqWN0cmljYXMgZGVsIGFndWEuDQoNCsKhVmF5YSEgRW4gZXN0ZSBlamVyY2ljaW8gbm8gcmVxdWVyaW1vcyBuaW5ndW5hIGRlIGVzdGFzIHNvZmlzdGljYWNpb25lcyBwb3JxdWUgZWwgbWV0YW5vIGVzIGFwb2xhciB5IGVzIGdhc2Vvc28sIHBlcm8gbG8gaW50ZXJlc2FudGUgZXMgcXVlIHBvZHLDrWFtb3MgdXNhciBlc3RlIHBhcXVldGUgcGFyYSBhYm9yZGFyIGNhc29zIG11Y2hvIG3DoXMgY29tcGxlam9zLg0KDQojIyMgUHJlZ3VudGEgMw0KQnVlbm8sIGFxdWkgZXMgaW1wb3J0YW50ZSBoYWNlciB1bmEgcHJlZ3VudGE6IMK/ZXMgbGEgZWN1YWNpw7NuIGRlIEhlZ2Vsc29uIGxpbmVhbD8gUmVzcG9uZGEsIHkganVzdGlmaXF1ZSBzdSByZXNwdWVzdGEuDQoNCiMjIyMgUmVzcHVlc3RhIChlc2NyaWJlIGEgY29udGludWFjacOzbikNCg0KLS0tDQoNCjIuIFN1IGFsZ29yaXRtbyBkZSBhanVzdGUgdXRpbGl6YSBsYSBtaXNtYSBmdW5jacOzbiBgbG0oKWAuIEFkZW3DoXMsIHVzYSBpbnRlcm5hbWVudGUgbGEgZnVuY2nDs24gYHdhdGVyKClgIHBhcmEgZW5jb250cmFyIGFxdWVsbGFzIHByb3BpZWRhZGVzIGVsZWN0cm9zdMOhdGljYXMgZGVsIGFndWEgcmVsYWNpb25hZGFzIGNvbiBsYSBzb2x2YXRhY2nDs24gcXVlIHNlIG1lbmNpb27DsyBhbnRlcmlvcm1lbnRlLg0KDQpQb3IgZWplbXBsbywgc2UgcHVlZGUgYWp1c3RhciB1bmEgZWN1YWNpw7NuIHBhcmEgbG9zIGRhdG9zIGNvbXBsZXRvcyBhc8OtOg0KDQpgYGB7cn0NCnZhciA8LSBjKCJpbnZUVGhldGEyIiwgIlRYQm9ybiIpDQpDcGxtX2hpZ2ggPC0gRU9TcmVncmVzcyhDcGRhdCwgdmFyKQ0KQ3BsbV9oaWdoJGNvZWZmaWNpZW50cw0KYGBgDQoNCnkgZWwgcGFxdWV0ZSB0cmFlIGxhIHNpZ3VpZW50ZSBmdW5jacOzbiBwYXJhIGdyYWZpY2FyLiBFamVjdXRlIGxhIHNpZ3VpZW50ZSBjZWxkYSB5IG9ic2VydmUgbGEgZ3LDoWZpY2EuDQoNCmBgYHtyfQ0KRU9TcGxvdChDcGRhdCwgY29lZmljaWVudHMgPSByb3VuZChDcGxtX2hpZ2gkY29lZmZpY2llbnRzLCAxKSkNCmBgYA0KDQpUYW1iacOpbiBzZSBsZSBwdWVkZSBlc3BlY2lmaWNhciBlbCBwdW50byBkZSBjYW1iaW8sIG9ic2VydmUgZWwgc2lndWllbnRlIGPDs2RpZ286DQoNCmBgYHtyfQ0KQ3BsbV9sb3cgPC0gRU9TcmVncmVzcyhDcGRhdCwgdmFyLCBULm1heCA9IDYwMCkNCkNwbG1fbG93JGNvZWZmaWNpZW50cw0KYGBgDQoNCiMjIyBQcmVndW50YSA0DQpBaG9yYSwgZ3JhZmljYSBlbCBtb2RlbG8gYENwbG1fbG93YCBwb3IgdGkgbWlzbW8gdXNhbmRvIGxhIGZ1bmNpw7NuIGBFT1NwbG90KCkgYHkgb2JzZXJ2YSBsYSBkaWZlcmVuY2lhIGNvbiBlbCBtb2RlbG8gYENwbG1faGlnaGAgDQoNCmBgYHtyfQ0KIyBHcmFmaWNhIGVuIGVzdGEgY2VsZGENCkVPU3Bsb3QoQ3BkYXQsIGNvZWZmaWNpZW50cyA9IHJvdW5kKENwbG1fbG93JGNvZWZmaWNpZW50cywgMSkpDQpzdW1tYXJ5KENwbG1fbG93KQ0Kc3VtbWFyeShDcGxtX2hpZ2gpDQpgYGANCg0KLS0tDQoNCiMjIyBQcmVndW50YSA1DQpDb21vIG1lbmNpb25hbW9zIGFudGVzLCBgRU9TcmVncmVzcygpYCB1c2EgYSBgbG0oKWAuIFBvciBsbyB0YW50bywgcHVlZGVzIHVzYXIgbGEgZnVuY2nDs24gYHN1bW1hcnkoKWAgcGFyYSBpbmRhZ2FyIGxhIGNhbGlkYWQgZGVsIGFqdXN0ZS4gQ29tcGFyYSBsb3MgbW9kZWxvcyBgQ3BsbV9oaWdoYCB5IGBDcGxtX2xvd2AgY29uIGxvcyBtb2RlbG9zIHF1ZSBoYXMgYWp1c3RhZG8gYW50ZXMuIMK/Q3XDoWwgb2J0aWVuZSBtZWpvciBjYWxpZGFkIGRlIGFqdXN0ZT8NCg0KIyMjIyBSZXNwdWVzdGEgKGVzY3JpYmUgYSBjb250aW51YWNpw7NuKQ0KDQo=